Menu

array_search() w PHP: jak znaleźć klucz wartości

array_search($value, $array) zwraca klucz pierwszego elementu równego $value albo false, gdy takiego nie ma. Ponieważ kluczem może być 0, wynik zawsze sprawdzaj przez !== false. Strona opisuje wyszukiwanie ścisłe, znajdowanie wszystkich dopasowań, przeszukiwanie tablicy wielowymiarowej przez array_column i wyszukiwanie bez rozróżniania wielkości liter.

Na tej stronie są działające edytory: edytuj, uruchamiaj i od razu zobacz wynik.

array_search($value, $array) zwraca klucz pierwszego elementu równego $value albo false, jeśli żaden element nie pasuje. Ponieważ znaleziony klucz może wynosić 0, sprawdzaj wynik przez !== false, jak w if (($key = array_search('pear', $fruits)) !== false).

Jeśli potrzebujesz tylko odpowiedzi tak lub nie, in_array() daje ją bezpośrednio. array_search() jest do sytuacji, w których musisz wiedzieć, gdzie leży wartość, na przykład aby ją zmienić lub usunąć.

Pułapka 0 i false

Najczęstszy błąd z array_search(): wartość jest pierwszym elementem, jej klucz to 0, a if ($key) traktuje 0 jak fałsz. Kod mówi „nie znaleziono” o wartości, która tam jest. Porównuj przez !== false, które pasuje tylko do prawdziwego false.

!= false ma ten sam błąd co if ($key), bo 0 == false daje true. Rozróżnia je tylko operator ścisły.

Wyszukiwanie ścisłe

Podobnie jak in_array(), array_search() porównuje przez ==, chyba że podasz true jako trzeci argument. Tryb luźny pozwala stringowi znaleźć liczbę, a null znaleźć 0, co zwraca klucz, którego się nie spodziewasz.

Wszystkie klucze z daną wartością

array_search() zatrzymuje się na pierwszym dopasowaniu. array_keys($array, $value) zwraca każdy pasujący klucz jako tablicę; dodaj true dla porównania ścisłego. Pusty wynik oznacza brak dopasowania, więc nie ma pomyłki między 0 a false.

Przeszukiwanie tablicy wielowymiarowej przez array_column

array_search() nie zagląda do zagnieżdżonych tablic. Dla listy wierszy wyciągnij szukane pole przez array_column(); pozycje na tej liście odpowiadają numerom wierszy, więc wynikiem jest indeks wiersza.

array_column() numeruje wynik od 0, więc to się zgadza tylko wtedy, gdy wiersze są numerowane 0, 1, 2 bez przerw. Po unset() albo array_filter() numeracja ma luki; najpierw wywołaj array_values() na wierszach albo użyj wyszukiwania po kluczu z ostatnich dwóch linii. Więcej o formie z kluczem indeksu znajdziesz na stronie array_column().

Wyszukiwanie bez rozróżniania wielkości liter

array_search() porównuje stringi dokładnie. Aby zignorować wielkość liter, zamień obie strony na małe litery. array_map() zachowuje klucze, więc otrzymany klucz jest kluczem w oryginalnej tablicy.

Wyszukanie i zamiana lub usunięcie

Zwykle szukasz po to, by coś zrobić ze znalezionym elementem. Mając klucz, przypisz, aby go zmienić, albo użyj unset(), aby go usunąć, i zawsze najpierw zabezpiecz się przez !== false: unset($arr[false]) po cichu usuwa element o kluczu 0.

Najczęściej zadawane pytania

Co zwraca array_search, gdy wartość nie zostanie znaleziona?

false. Gdy wartość zostanie znaleziona, zwraca jej klucz, który może być 0 albo pustym stringiem, więc sprawdzaj wynik przez !== false, nigdy przez if ($key) ani != false.

Dlaczego moje sprawdzenie array_search nie działa dla pierwszego elementu?

Pierwszy element tablicy indeksowanej ma klucz 0, a 0 jest traktowane jak fałsz. Dlatego if (array_search('a', ['a', 'b'])) wchodzi w gałąź „nie znaleziono”. Napisz if (array_search('a', $arr) !== false).

Jak znaleźć wszystkie klucze dla danej wartości w PHP?

array_search() zatrzymuje się na pierwszym dopasowaniu. array_keys($array, $value, true) zwraca każdy klucz, którego wartość pasuje, jako tablicę (pustą, gdy nie ma żadnego).

Jak przeszukać tablicę wielowymiarową w PHP?

Wyciągnij pole do płaskiej listy i przeszukaj ją: $i = array_search('ada@example.com', array_column($users, 'email'));, a potem odczytaj wiersz jako $users[$i]. To działa, gdy wiersze są numerowane 0, 1, 2; w przeciwnym razie użyj pętli foreach.

Ilustracja języków programowania w Coddy

Ucz się programowania z Coddy

ZACZNIJ