Измените функцию поиска по массиву, чтобы получить более одного результата - PullRequest
0 голосов
/ 16 августа 2011

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

Функция:

function in_array_r($needle, $haystack) {
    foreach ($haystack as $item) {
        if ($item === $needle || (is_array($item) && in_array_r($needle, $item))) {
            return $item;
        }
    }
    return false;
}

Ответы [ 3 ]

3 голосов
/ 16 августа 2011

Вместо того, чтобы сразу возвращаться, просто добавьте $ item в массив. Замените return false на return $your_array (тот, который содержит ваши предметы). Поэтому $ your_array будет содержать каждый элемент, соответствующий вашему состоянию.

0 голосов
/ 16 августа 2011

Вот окончательный код, который я решил исправить. Спасибо за быстрые ответы:)

function in_array_r($needle, $haystack) {
   $array = array(); 
    foreach ($haystack as $item) {
        if ($item === $needle || (is_array($item) && in_array_r($needle, $item))) {
            array_push($array,$item);
        }
    }
    return $array;
}
0 голосов
/ 16 августа 2011

Да, как только вы вернетесь из функции, выполнение будет завершено.Я не уверен, для чего служит цель возврата одного произвольного значения, если вы уже знаете, что оно эквивалентно $ needle.Похоже, это должно просто вернуть истину.Допустим, вы изменили функцию, добавив массив $ match, в котором вы сохранили совпадения. Какое значение вы бы получили, чтобы получить массив, содержащий 3 элемента "foo"?

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