Menu

array_filter() w PHP: filtrowanie po wartości i kluczu

array_filter($array, $callback) zostawia elementy, dla których callback zwraca true. Dowiedz się, jak usuwać puste wartości, filtrować po kluczu z ARRAY_FILTER_USE_KEY, numerować wynik od nowa przez array_values i sumować przez array_reduce.

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

array_filter($array, $callback) zwraca elementy $array, dla których $callback zwraca true (albo dowolną wartość, która zamienia się na true). Najpierw tablica, potem callback, a zachowane elementy zachowują swoje oryginalne klucze.

Klucze w wyniku to 1, 3, 5, 7: pozycje, które te wartości miały w oryginalnej tablicy. Ten szczegół ma większe znaczenie, niż się wydaje, a przedostatnia sekcja poniżej pokazuje, jak sobie z nim radzić.

Usuwanie pustych wartości z tablicy

Wywołaj array_filter bez callbacku, a usunie każdą wartość, która zamienia się na false: puste stringi, null, false, 0, "0" i puste tablice. To najszybszy sposób na uporządkowanie kawałków z explode() albo listy pól formularza.

Pierwszy wynik stracił też "0" i 0, które często są prawdziwymi danymi (ilość zero, cyfra kodu pocztowego). Gdy zero jest poprawną odpowiedzią, napisz callback sam, jak w drugim wywołaniu. Pełną listę wartości, które PHP uznaje za puste, znajdziesz na stronie empty.

Numerowanie wyniku od nowa przez array_values

Ponieważ klucze są zachowane, przefiltrowana lista może mieć luki. Pętla for od 0 trafia wtedy na brakujące klucze, a json_encode zamienia wynik w obiekt JSON zamiast tablicy. array_values() numeruje go od nowa.

Filtrowanie po kluczu z ARRAY_FILTER_USE_KEY

Trzeci argument wybiera, co dostaje callback. ARRAY_FILTER_USE_KEY przekazuje tylko klucz. ARRAY_FILTER_USE_BOTH przekazuje wartość, a potem klucz.

Aby zostawić stały, znany zestaw kluczy, array_intersect_key($config, array_flip(['db_host', 'db_port'])) robi to samo bez callbacku.

Filtrowanie tablicy wielowymiarowej

Większość prawdziwych danych to lista wierszy. Callback dostaje po jednym wierszu, więc sprawdzasz to pole, którego potrzebujesz.

Zmień $maxPrice i uruchom ponownie. Aby potem dostać same nazwy, przekaż wynik do array_column: array_column($affordable, 'name').

Filtrowanie, potem mapowanie, potem redukcja

array_filter wybiera elementy, array_map je zmienia, a array_reduce zwija tablicę do jednej wartości. array_reduce($array, $callback, $initial) wywołuje callback z bieżącą sumą i kolejnym elementem.

Dla zwykłej sumy krótsze jest array_sum($totals). array_reduce przydaje się, gdy wynikiem jest coś innego: string, liczba na grupę, największy wiersz.

Częsty błąd: zmiana wartości w array_filter

Wartość zwracana przez callback decyduje tylko o tym, czy element zostaje. Wszystko inne, co callback obliczy, jest wyrzucane, więc ten kod niczego nie przycina:

Przekształcaj przez array_map, potem filtruj, a gdy potrzebujesz czystej listy, dodaj array_values.

Najczęściej zadawane pytania

Jak usunąć puste wartości z tablicy w PHP?

Wywołaj array_filter($array) bez callbacku: odrzuca każdą wartość traktowaną jak fałsz ("", null, false, 0, "0", []). Aby odrzucić tylko puste stringi i null, a zostawić 0, przekaż callback: array_filter($array, fn($v) => $v !== '' && $v !== null).

Dlaczego array_filter zachowuje stare klucze?

array_filter nigdy nie numeruje od nowa: zachowane elementy zostają pod swoimi oryginalnymi kluczami, więc lista może wrócić jako [0 => 'a', 2 => 'c']. Otocz wynik przez array_values(), aby znów dostać 0, 1, 2; dzięki temu json_encode utworzy tablicę JSON zamiast obiektu.

Jak filtrować tablicę po kluczu w PHP?

Przekaż ARRAY_FILTER_USE_KEY jako trzeci argument, a callback dostanie klucz zamiast wartości: array_filter($arr, fn($k) => str_starts_with($k, 'db_'), ARRAY_FILTER_USE_KEY). Użyj ARRAY_FILTER_USE_BOTH, aby dostać wartość i klucz.

Czym różni się array_filter od array_map?

array_filter decyduje, które elementy zostają, i zwraca je bez zmian. array_map zmienia każdy element i zwraca tyle samo elementów. Aby zrobić jedno i drugie, połącz je: array_map('strtoupper', array_filter($arr)).

Ilustracja języków programowania w Coddy

Ucz się programowania z Coddy

ZACZNIJ