你的格式不便于检索
你可以手工建一个,写一下检索程序
一般要这样写
$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.   

    谢谢版主,解决了我的问题
    再请教两个小问题:
    1.现在数组的叶节点是数组,怎么改成string
    2.数据库中的敏感词有两万多条,怎样的数组结构和检索方法效率更高呢?谢谢
      

  2.   

    接上例shrink($d);
    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 个类,你可借鉴一下
    从研究算法的角度,为避免思维惯的性影响。我不建议你研读我的代码,而是从算法原理入手。或许你就能创造出更好的代码来
      

  3.   

    我的想法是否可以使用 函数递归,str_replace方法