Intereting Posts
Функция MYSQL DATE работает безумно медленнее в LEFT JOIN Домашняя страница настройки Codeigniter (контроллер по умолчанию) Doctrine – вставить несколько строк только с одним сохранением () Несколько запросов на вставку в PHP SQLSTATE : Ошибка синтаксиса или нарушение доступа: 1065 Запрос был пуст (SQL:) Получите информацию о пользователе в facebook после входа в систему, используя facebook php sdk Аутентификация пользователя через субдомены на локальном хосте Новая recaptcha не работает дважды (в основном) на той же странице preg_match для формата даты mysql Форсирование Загрузка с серверов s3 amazon Приложение Facebook обновляется автоматически Как исправить предупреждение «Создание объекта по умолчанию из пустого значения» в PHP Как обрабатывать полученный HTTP-заголовок MySQL IFNULL () с несколькими таблицами не работает Как исправить ошибку «Заголовки уже отправлены» в PHP

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

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

Related of "который является лучшим array_search или in_array?"

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

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

 $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 

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

это другая функция in_array – возвращает true, если значение find 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 

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

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

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

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