我需要将一个值与一组数组进行比较。但是,我需要比较foreach中的多个值。如果使用in_array,它可能很慢,非常慢。还有更快的选择吗?我目前的代码是
foreach($a as $b){
in_array($b, $array);
}
谢谢。
答案 0 :(得分:6)
您可以使用array_diff
来计算$a
数组与$array
之间的差异。这将为您提供$array
或$a
以外的所有值。
手册示例:
$array1 = array("a" => "green", "red", "blue", "red");
$array2 = array("b" => "green", "yellow", "red");
print_r( array_diff($array1, $array2) );
Array
(
[1] => blue
)
或者您可以使用array_intersect
查找那些阵列中的那些。
array_intersect
PHP手册示例:
$array1 = array("a" => "green", "red", "blue");
$array2 = array("b" => "green", "yellow", "red");
print_r( array_intersect($array1, $array2) );
Array
(
[a] => green
[0] => red
)
选择你需要的那个。
答案 1 :(得分:2)
如果您可以将数组视为哈希:
$array = array('value' => 1);
然后在foreach中这样做:
foreach($a as $b){
isset($array[$b]);
}
我刚刚复制并粘贴了您的示例,我想有更多代码,但基本上使用isset比使用in_array函数快得多,
答案 2 :(得分:1)
我认为你正在寻找一个$ a $数组的交集,不是吗?如果是,请使用array_intersect()
答案 3 :(得分:0)
使用禁止在数组值中写入的分隔符来放大外部数组:
$x = "\x1a";
$array = $x . implode($x, $array) . $x;
foreach ($a as $b) {
if (strpos($array, $x . $b . $x) !== false) {
// in array
}
}