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
这样很慢吧?有更快的思路嘛?
[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
按你那个做法,你可以将$c再按空格切成数组,然后计算其和$temp[$j]的交集个数是不是和$c切成的数组个数一致,有个函数array_intersect,你可以看一下。
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