Подтвердить что ты не робот

Который является лучшим array_search или in_array?

У меня большая функция цикла while, каждый раз, когда она загружается для проверки с текущим именем URL. Поэтому мне нужно знать, какой из них лучше проверить имя URL в большом массиве в цикле while, in_array() или array_search().

4b9b3361

Ответ 1

На основе документации in_array и array_search, Я думаю, что в основном это зависит от того, что вы хотите сделать с информацией: если вам нужна запись, используйте array_search, если вы просто хотите проверить, существует ли в массиве url, in_array должно быть достаточно.

Ответ 2

Здесь нет реального ответа. Поэтому я попробовал, сам.

$haystack = array
(
    'apple',
    'banana',
    'cherry',
    'lemon',
    'lime',
    'orange',
    'potato',
    'rutabaga'
);
$haySize = count($haystack);

$loops = isset( $_SERVER['argv'][1] ) ? $_SERVER['argv'][1] : 10000;
// echo 'Loops: ' . $loops . "\n";

$start = microtime(true);
for ($i = 0; $i < $loops; $i++)
{
    $needle = $haystack[ $i % $haySize ];
}
$zeroTime = microtime(true) - $start;
// echo sprintf('%0.3f', $zeroTime * 1000) . ' ms : zero time' . "\n";

$start = microtime(true);
for ($i = 0; $i < $loops; $i++)
{
    $needle = $haystack[ $i % $haySize ];
    $dummy = array_search($needle, $haystack);
}
echo sprintf('%0.3f', (microtime(true) - $start - $zeroTime) * 1000) . ' ms : array_search' . "\n";

$start = microtime(true);
for ($i = 0; $i < $loops; $i++)
{
    $needle = $haystack[ $i % $haySize ];
    $dummy = in_array($needle, $haystack);
}
echo sprintf('%0.3f', (microtime(true) - $start - $zeroTime) * 1000) . ' ms : in_array' . "\n";
    echo sprintf('%0.3f', (microtime(true) - $start) * 1000).' ms : in_array'."\n";

Для типичного варианта использования in_array выигрывает, но разница незначительна:

22.662 ms : array_search
22.104 ms : in_array

Обновлен 2014-01-02: добавлен цикл noop для "нулевого масштаба". Запуск PHP 5.4.17 на новом MacBook pro, это типичный результат:

24.462 ms : array_search
24.984 ms : in_array

Ответ 3

Если в цикле большой массив и, ни один из них не является "лучшим". Вместо этого используйте array_flip() в вашем массиве, поэтому URL-адреса становятся ключами. И используйте isset(), чтобы проверить наличие.

Ответ 4

это другая функция in_array - возвращает true, если значение поиска array_search - вернуть позицию, если значение поиска

$a = array('a', 'b');
var_dump(in_array('a', $a)); // return true
var_dump(array_search('a', $a)); // return 0 
if (array_search('a', $a)) - false

Ответ 5

Если вы являетесь единственной целью - проверить, существует ли URL-адрес в массиве, для которого я хотел бы использовать in_array. Лучше всего иметь ключи, чтобы вы могли просто искать по массиву. Таким образом, вы сохраняете много циклов.

$searchword = "test";
echo $array[$searchword];

Ответ 6

Это размер вашего массива. -Если у вас небольшой массив (например, 500 Кбит 32 бит) in_array и array_search дают вам такую ​​же производительность isset (array [needle]) не имеет смысла из-за flip()

-В больших массивах (например, > 1 м 32-битный ключ) Есть действительно большая разница между in_array и isset (array [needle])