Поисковый массив: массив_фильтр против цикла - PullRequest
2 голосов
/ 22 июля 2011

Я действительно новичок в PHP и мне нужно предложение по поиску по массиву.

Если я хочу найти элемент внутри многомерного массива, я могу использовать array_filter или я могу перебрать массиви посмотрите, присутствует ли элемент, соответствующий моим критериям.

Я вижу оба предложения во многих местах.Что быстрее?Ниже приведен пример массива.

Array ( 
  [0] => Array ( 
    [id] => 4e288306a74848.46724799
    [question] => Which city is capital of New York?
    [answers] => Array ( 
      [0] => Array ( 
        [id] => 4e288b637072c6.27436568 
        [answer] => New York 
        [question_id_fk] => 4e288306a74848.46724799 
        [correct] => 0 
      ) 
      [1] => Array ( 
        [id] => 4e288b63709a24.35955656 
        [answer] => Albany 
        [question_id_fk] => 4e288306a74848.46724799 
        [correct] => 1 
      ) 
    )
  )
)

Я ищу вот так.

$thisQuestion = array_filter($pollQuestions, function($q) {
  return questionId == $q["id"];
});

Ответы [ 4 ]

1 голос
/ 22 июня 2017

Я знаю, вопрос старый, но я не согласен с принятым ответом.Мне также было интересно, есть ли разница между циклом foreach() и функцией array_filter(), и нашел следующий пост:

http://www.levijackson.net/are-array_-functions-faster-than-loops/

Леви Джексон отлично поработал исравнил скорость нескольких петель и array_*() функций.По его словам, цикл foreach() быстрее, чем функция array_filter().Хотя это, в основном, не имеет большого значения, оно начинает иметь значение, когда вам приходится обрабатывать много данных.

1 голос
/ 31 октября 2018

Я знаю, что это старый вопрос, но я дам свои два цента: для меня использование цикла foreach было намного быстрее, чем использование array_filter.При использовании foreach поиск по идентификатору занял 1,4 секунды, а при использовании фильтра - 8,6 секунды.

0 голосов
/ 30 апреля 2019

Из моего собственного опыта, foreach быстрее. Я думаю, что это как-то связано с накладными расходами на вызовы функций, проверкой аргументов, инструкцией копирования в переменную и т. Д. При использовании основного синтаксиса анализируемый код с большей вероятностью будет ближе к скомпилированным / интерпретируемым байт-кодам, чем лучше оптимизируется ядро.

Общее правило: все проще, работает быстрее (подразумевает меньше проверок, меньше функциональности, если в нем есть все, что вам нужно)

0 голосов
/ 22 июля 2011

Array_Filter

Итерирует по каждому значению во входном массиве, передавая их функции обратного вызова.Если функция обратного вызова возвращает true, текущее значение из input возвращается в массив результатов.Ключи массива сохраняются.

как по мне то же самое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...