你的格式不便于检索
你可以手工建一个,写一下检索程序
一般要这样写
$s = 'abc,abd,acd';
$a = explode(',', $s);$d = array();
$p =& $d;
foreach($a as $s) {
$p =&$d;
foreach(str_split($s) as $c) {
if(! isset($p[$c])) $p[$c] = array();
$p =& $p[$c];
}
}
print_r($d);
Array
(
[a] => Array
(
[b] => Array
(
[c] => Array
(
) [d] => Array
(
) ) [c] => Array
(
[d] => Array
(
) ) ))
检索时递归一下就可以了
你可以手工建一个,写一下检索程序
一般要这样写
$s = 'abc,abd,acd';
$a = explode(',', $s);$d = array();
$p =& $d;
foreach($a as $s) {
$p =&$d;
foreach(str_split($s) as $c) {
if(! isset($p[$c])) $p[$c] = array();
$p =& $p[$c];
}
}
print_r($d);
Array
(
[a] => Array
(
[b] => Array
(
[c] => Array
(
) [d] => Array
(
) ) [c] => Array
(
[d] => Array
(
) ) ))
检索时递归一下就可以了
再请教两个小问题:
1.现在数组的叶节点是数组,怎么改成string
2.数据库中的敏感词有两万多条,怎样的数组结构和检索方法效率更高呢?谢谢
print_r($d);//shrink 收缩叶子
function shrink(&$a) {
$t = array();
foreach($a as $k=>&$v) {
if($v) shrink($v);
else $t[] = $k;
}
if($t) $a = $t;
}Array
(
[a] => Array
(
[b] => Array
(
[0] => c
[1] => d
) [c] => Array
(
[0] => d
) ))
你这是 trie树 的实现,有关 trie树 的原理请到网上去搜
精华区中有我的 2 个类,你可借鉴一下
从研究算法的角度,为避免思维惯的性影响。我不建议你研读我的代码,而是从算法原理入手。或许你就能创造出更好的代码来