Tablica wygląda następująco:
[0] => stdClass Object
(
[ID] => 420
[name] => Mary
)
[1] => stdClass Object
(
[ID] => 10957
[name] => Blah
)
...
I mam zmienną całkowitą o nazwie $v
.
Jak mogę wybrać wpis tablicy zawierający obiekt, którego ID
właściwość ma $v
wartość?
isset($item)
ale ja wolę poprawnie inicjalizować zmienneif($v == $struct["ID"]){...
YurkamTim ma rację. Potrzebuje tylko modyfikacji:
Po funkcji ($) potrzebujesz wskaźnika do zmiennej zewnętrznej przez „use (& $earchValue)”, a następnie możesz uzyskać dostęp do zmiennej zewnętrznej. Możesz go również zmodyfikować.
źródło
&
jest wymagana podczas importowania$searchedValue
do zakresu zamknięcia.&
Służy do tworzenia odniesienie, które są potrzebne tylko wtedy, gdy$searchedValue
został zmodyfikowany wewnątrz zamknięcia.global
było jedynym sposobem na udostępnianie danych w funkcjach! Ale szkoda, jeśli jest to rzeczywiście powolne. :(źródło
Znalazłam bardziej eleganckie rozwiązanie tutaj . Dostosowany do pytania może wyglądać tak:
źródło
array_filter
zwraca tablicę i nie zatrzymuje się na pierwszej znalezionej wartości.$searchedValue
wewnątrz funkcji. Ale na zewnątrz jest.$searchedValue
jest poza zakresem zamknięcia. Po drugie, jak myślisz, jak działają te metody tablicowe? Wszystkie wewnętrzne pętle nad tablicą$searchedValue
napiszfunction ($e) use ($searchedValue) {
Użycie kolumny array_column do ponownego indeksowania pozwoli zaoszczędzić czas, jeśli musisz znaleźć wiele razy:
Wtedy możesz po prostu
$lookup[$id]
do woli.źródło
Używanie go tak, jak chciałeś, wyglądałoby następująco:
źródło
Próbować
przykład pracy tutaj
źródło
Naprawiając mały błąd @YurkaTim , twoje rozwiązanie działa dla mnie, ale dodaje
use
:Aby użyć
$searchedValue
, wewnątrz funkcji, jedno rozwiązanie może znajdować sięuse ($searchedValue)
po parametrach funkcjifunction ($e) HERE
.array_filter
funkcja zwraca tylko na$neededObject
if Warunkiem zwrotu jesttrue
Jeśli
$searchedValue
jest ciągiem znaków lub liczbą całkowitą:Jeśli
$searchedValue
jest tablica, w której musimy sprawdzić listę:źródło
var_dump($neededObject);
:)Czasami lubię używać funkcji array_reduce () do wyszukiwania. Jest podobny do array_filter (), ale nie wpływa na przeszukiwaną tablicę, umożliwiając przeprowadzenie wielu wyszukiwań tej samej tablicy obiektów.
źródło
if ($current_item->someProperty == $needle){ $result_array[] = $current_item; }
Zrobiłem to z jakąś mapą klawiszy Javy. Jeśli to zrobisz, nie będziesz musiał za każdym razem zapętlać swojej tablicy obiektów.
wynik:
źródło
Sposób na natychmiastowe uzyskanie pierwszej wartości:
źródło
Opublikowałem tutaj, czego używam do skutecznego rozwiązania tego problemu, używając szybkiego algorytmu wyszukiwania binarnego: https://stackoverflow.com/a/52786742/1678210
Nie chciałem kopiować tej samej odpowiedzi. Ktoś inny zadał to nieco inaczej, ale odpowiedź jest taka sama.
źródło