ask:更快的匹配数组内容 咋写来着..

数组A.包含很多项
  [0] => 01 11 02 03
  [1] => 01 11 02 04
  [2] => 01 11 02 14
  [3] => 01 11 02 05
  [4] => 01 11 02 15
  [5] => 01 11 02 06
  [6] => 01 11 02 07
  [7] => 01 11 03 04
  [8] => 01 11 03 14
  [9] => 01 11 03 05
 ...

需要核对每项里的内容是否每个数字都出现在 某个string 内 比如C= 01 11 03 有什么最快的方法?

例如判断 [9] => 01 11 03 05 /
 01 是否出现在 c内 
11 是否出现在 c 内 
如果有一项不存在 那么返回false.

1.遍历 数组A 将每一项内容 转换成一个数组 B
2.循环B 进行 strpos/strstr 函数的判断是否存在 C(string) 内.如果其中一项不存在那么直接break;
如果循环到最后都是true 那么将该项内容复制给 新的数组 
PHP code

$test=array('01 11 02 03','01 11 02 04','01 11 02 14','01 11 02 05','01 11 02 15');
$c='01 11';
$good=array();

for ($i=0;$i<sizeof ($test);$i++)
{
    $temp=array();
    $temp=explode(' ',$test[$i]);
    for ($j=0;$j<sizeof($temp);$j++)
    {
        if (strstr($c,$temp[$j])=='')
        {
            break;
//不知道咋写了...怂了
        }else
        {
            
        }

    }
}

print_r($good);






这样很慢吧?有更快的思路嘛?

作者: PhpNewnew   发布时间: 2011-06-13

速度是不是更快不一定,但有个正则的方案,代码会比较简短。
PHP code
$test=array('01 11 02 03','01 11 02 04','01 11 02 14','01 11 02 05','01 11 02 15');
$c='01 11';
foreach(explode(' ',$c) as $v)
{
        $p[] = "(?=.*\b{$v}\b)";
}
print_r(preg_grep('#'.implode('',$p).'#',$test));

按你那个做法,你可以将$c再按空格切成数组,然后计算其和$temp[$j]的交集个数是不是和$c切成的数组个数一致,有个函数array_intersect,你可以看一下。

作者: foolbirdflyfirst   发布时间: 2011-06-13