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.