Массив выглядит так:
[0] => stdClass Object
(
[ID] => 420
[name] => Mary
)
[1] => stdClass Object
(
[ID] => 10957
[name] => Blah
)
...
И у меня есть целочисленная переменная с именем $v
.
Как я могу выбрать запись массива, которая имеет объект, где ID
свойство имеет $v
значение?
isset($item)
но я предпочитаю правильно инициализировать переменныеif($v == $struct["ID"]){...
Юркам Тим прав. Нужна только модификация:
После функции ($) вам нужен указатель на внешнюю переменную с помощью «use (& $ seekValue)», а затем вы можете получить доступ к внешней переменной. Также вы можете изменить его.
источник
&
Не требуется при ввозе$searchedValue
в сферу закрытия.&
Используется для создания ссылки , которая необходима , только если$searchedValue
был изменен внутри затвора.global
было единственным, чтобы делиться данными в функциях! Но жаль, если это действительно медленно. :(источник
Я нашел более элегантное решение здесь . Адаптированный к вопросу это может выглядеть так:
источник
array_filter
возвращает массив и не останавливается на первом найденном значении.$searchedValue
внутри функции. Но снаружи это так.$searchedValue
выходит за рамки замыкания. Во-вторых, как вы думаете, эти методы массива работают? Все они зацикливаются внутри массива$searchedValue
нужно написатьfunction ($e) use ($searchedValue) {
Использование array_column для переиндексации сэкономит время, если вам нужно будет найти несколько раз:
Тогда вы можете просто
$lookup[$id]
по желанию.источник
Использовать его так, как вы хотели, было бы примерно так:
источник
Пытаться
рабочий пример здесь
источник
Исправив небольшую ошибку @YurkaTim , ваше решение работает для меня, но добавив
use
:Использовать
$searchedValue
внутри функции одно решение может бытьuse ($searchedValue)
после параметров функцииfunction ($e) HERE
.array_filter
функция возвращает только на ,$neededObject
если условие о возврате являетсяtrue
Если
$searchedValue
это строка или целое число:Если
$searchedValue
это массив, где нам нужно проверить со списком:источник
var_dump($neededObject);
:)Иногда мне нравится использовать функцию array_reduce () для поиска. Он похож на array_filter (), но не влияет на искомый массив, что позволяет выполнять несколько поисков для одного и того же массива объектов.
источник
if ($current_item->someProperty == $needle){ $result_array[] = $current_item; }
Я сделал это с помощью какой-то таблицы ключей Java. Если вы сделаете это, вам не нужно каждый раз перебирать массив объектов.
вывод:
источник
Способ мгновенно получить первое значение:
источник
Я разместил то, что использую для эффективного решения этой проблемы, здесь, используя быстрый алгоритм двоичного поиска: https://stackoverflow.com/a/52786742/1678210
Я не хотел копировать тот же ответ. Кто-то спросил это немного по-другому, но ответ тот же.
источник