быстрее, чем in_array? - PullRequest
       1

быстрее, чем in_array?

4 голосов
/ 18 августа 2010

Мне нужно сравнить значение с набором массивов.Однако мне нужно сравнить несколько значений в foreach.При использовании in_array он может быть медленным, очень медленным.Есть ли более быстрая альтернатива?Мой текущий код

foreach($a as $b){
   in_array($b, $array);
}

Спасибо.

Ответы [ 4 ]

6 голосов
/ 18 августа 2010

Вы можете использовать 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
)

Выберите тот, который вам нужен.

2 голосов
/ 18 августа 2010

Если вы можете рассматривать массив как хеш:

$array = array('value' => 1);

Тогда в foreach сделайте это:

foreach($a as $b){
    isset($array[$b]);
}

Я только что скопировал и вставил ваш пример, полагаю, что кода больше, но в основном использование isset намного быстрее, чем использование функции in_array,

1 голос
/ 18 августа 2010

Я думаю, вы ищете пересечение массива $ a $, не так ли?Если да, просто используйте array_intersect()

0 голосов
/ 19 октября 2018

Внедрить внешний массив с разделителем, который запрещено записывать в значение массива:

$x = "\x1a";
$array = $x . implode($x, $array) . $x;
foreach ($a as $b) {
    if (strpos($array, $x . $b . $x) !== false) {
        // in array
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...