Mam tablicę, w której chcę wyszukać uid
i uzyskać klucz tablicy.
Przykłady
Załóżmy, że mamy następującą dwuwymiarową tablicę:
$userdb = array(
array(
'uid' => '100',
'name' => 'Sandra Shush',
'pic_square' => 'urlof100'
),
array(
'uid' => '5465',
'name' => 'Stefanie Mcmohn',
'pic_square' => 'urlof100'
),
array(
'uid' => '40489',
'name' => 'Michael',
'pic_square' => 'urlof40489'
)
);
Wywołanie funkcji search_by_uid(100)
(identyfikator pierwszego użytkownika) powinno zostać zwrócone 0
.
Wywołanie funkcji search_by_uid(40489)
powinno wrócić 2
.
Próbowałem tworzyć pętle, ale chcę szybciej wykonywać kod.
php
arrays
multidimensional-array
Rachit
źródło
źródło
array_column
odpowiedziami jednowierszowymi. Zmodyfikowałem je wszystkie, aby zwracały faktycznie wykrytą tablicę, a nie tylko klucz, ponieważ zwykle taki jest mój przypadek użycia. Metoda funkcji uzyskała wynik 0,361, kolumna wyszukiwania 0,184 i kolumna 0,189 średniego mikro opóźnienia dla 1000 metod dla każdej metody.Odpowiedzi:
To zadziała. Powinieneś to tak nazwać:
Ważne jest, aby wiedzieć, że jeśli używasz
===
operatora porównaniu typy muszą być dokładnie takie same, w tym przypadku trzeba szukaćstring
lub po prostu użyć==
zamiast===
.Na podstawie odpowiedzi angoru . W późniejszych wersjach PHP (
>= 5.5.0
) możesz używać jednej linijki.Oto dokumentacja: http://php.net/manual/en/function.array-column.php .
źródło
array_column($userdb, 'uid')
zarray_map(function($v){return $v['uid'];},$userdb)
array_search
, prawda?foreach
pętla) będzie działać szybciej, ponieważ zatrzymuje się, gdy tylko zostanie znalezione dopasowanie. Nowsze rozwiązanie musi raz wykonać iterację przez całą tablicę, aby ją wyodrębnićarray_column
, a następnie zapętlić ją po raz drugi, aby wykonać wyszukiwanie (dopóki nie znajdzie pasującego elementu). Nowsze rozwiązanie jest łatwiejsze do odczytania, bardziej zwięzłe, ale OP specjalnie podniosło wydajność jako problemJeśli używasz (PHP 5> = 5.5.0), nie musisz pisać własnej funkcji, aby to zrobić, po prostu napisz ten wiersz i gotowe.
Jeśli chcesz tylko jeden wynik:
Aby uzyskać wiele wyników
Jeśli masz tablicę asocjacyjną, jak wskazano w komentarzach, możesz to zrobić za pomocą:
Jeśli używasz PHP <5.5.0, możesz użyć tego backportu , dzięki ramsey!
Aktualizacja: Wykonałem kilka prostych testów porównawczych, a formularz wielu wyników wydaje się najszybszy, nawet szybszy niż niestandardowa funkcja Jakuba!
źródło
array_search(40489, array_combine(array_keys($userdb), array_column($userdb, 'uid')))
W późniejszych wersjach PHP (> = 5.5.0) możesz użyć tego jednowierszowego:
źródło
Opierając się na doskonałej odpowiedzi Jakuba , oto bardziej ogólne wyszukiwanie, które pozwoli określić klucz (nie tylko identyfikator użytkownika):
Stosowanie:
$results = searcharray('searchvalue', searchkey, $array);
źródło
Wiem, że już na nie odpowiedziano, ale użyłem tego i rozszerzyłem go trochę w moim kodzie, abyś nie szukał tylko identyfikatora użytkownika. Chcę go tylko udostępnić każdemu, kto może potrzebować tej funkcji.
Oto mój przykład i proszę pamiętać, że to moja pierwsza odpowiedź. Wyjąłem tablicę parametrów, ponieważ musiałem przeszukać tylko jedną konkretną tablicę, ale można ją łatwo dodać. Chciałem zasadniczo wyszukać coś więcej niż tylko identyfikator użytkownika.
Ponadto w mojej sytuacji może być wiele kluczy do zwrócenia w wyniku wyszukiwania według innych pól, które mogą nie być unikalne.
Później skończyłem pisać to, aby pozwolić mi szukać innej wartości i klucza asocjacyjnego. Tak więc mój pierwszy przykład pozwala wyszukać wartość w dowolnym kluczu asocjacyjnym i zwrócić wszystkie dopasowania.
Ten drugi przykład pokazuje, gdzie wartość („Taylor”) znajduje się w pewnym kluczu asocjacyjnym (imię), ORAZ inną wartość (true) znajduje się w innym kluczu asocjacyjnym (zatrudniony), i zwraca wszystkie dopasowania (klucze, w których ludzie o imieniu „Taylor” AND jest zatrudniony).
Zastosowanie funkcji
Wynik
źródło
Wygląda, że array_filter będzie odpowiednim rozwiązaniem dla tego ...
Kod PHP
źródło
syntax error, unexpected '=>' (T_DOUBLE_ARROW), expecting ';'
Zmodyfikowałem jeden z poniższych przykładów funkcji tablica_wyszukiwania . Funkcja
searchItemsByKey
zwraca wszystkie wartości według klucza $ z tablicy wielowymiarowej (N poziomów). Być może przydałby się komuś. Przykład:Kod funkcji:
źródło
Oto jedna wkładka do tego samego,
źródło
Mimo że jest to stare pytanie i ma zaakceptowaną odpowiedź, pomyślałem, że zasugeruję jedną zmianę w zaakceptowanej odpowiedzi. Po pierwsze, zgadzam się, że zaakceptowana odpowiedź jest tutaj poprawna.
Zastąpienie wstępnie ustawionego „uid” parametrem w funkcji, więc teraz wywołanie poniższego kodu oznacza, że możesz używać jednej funkcji w wielu typach tablic. Mała zmiana, ale taka, która robi niewielką różnicę.
Przykład PHP Fiddle
źródło
null
a następnie w kodzie, porównujesz gofalse
.Chcę sprawdzić, czy w poniższej tablicy
$arr
jest „abc” w podtablicach, czy niePotem mogę tego użyć
Myślę, że to najprostszy sposób na zdefiniowanie
źródło
Musiałem użyć funkcji un, która znajduje wszystkie elementy w tablicy. Zmodyfikowałem więc funkcję wykonaną przez Jakuba Trunečka w następujący sposób:
źródło
źródło
możesz użyć tej funkcji; https://github.com/serhatozles/ArrayAdvancedSearch
źródło
źródło
Spróbuj tego
źródło
Po prostu udostępnij, może ci się spodoba.
źródło
Spróbuj tego również
źródło
Za pomocą powyższego kodu można znaleźć dowolne (częściowo dopasowane) dane z dowolnej kolumny w tablicy 2D, dzięki czemu można znaleźć identyfikator użytkownika zgodnie z wymaganiami.
źródło
Rozwijając utworzoną funkcję @mayhem, ten przykład byłby bardziej „rozmytym” wyszukiwaniem w przypadku, gdybyś chciał dopasować tylko część ( większość ) ciągu wyszukiwania:
Na przykład wartość w tablicy to Welcome to New York! i chciałeś pierwszego wystąpienia po prostu „New York!”
źródło
źródło
Jeśli pytanie tj
Odp .:
źródło
moje rozwiązanie:
źródło