array_filter($array, $callback) restituisce gli elementi di $array per cui $callback restituisce true (o qualsiasi valore che si converte in true). Prima l'array, poi la callback, e gli elementi che restano mantengono le loro chiavi originali.
Le chiavi nel risultato sono 1, 3, 5, 7: le posizioni che quei valori avevano nell'array originale. Questo dettaglio conta più di quanto sembri, e la sezione dopo la prossima mostra come gestirlo.
Rimuovere i valori vuoti da un array
Chiama array_filter senza callback e rimuove ogni valore che si converte in false: stringhe vuote, null, false, 0, "0" e array vuoti. È il modo più rapido per ripulire i pezzi di un explode() o una lista di campi di un form.
Il primo risultato ha perso anche "0" e 0, che spesso sono dati reali (una quantità pari a zero, una cifra di un codice postale). Quando lo zero è una risposta valida, scrivi tu la callback, come nella seconda chiamata. La pagina su empty ha l'elenco completo dei valori che PHP considera vuoti.
Reindicizzare il risultato con array_values
Dato che le chiavi vengono mantenute, una lista filtrata può avere dei buchi. Un ciclo for da 0 incontra allora chiavi mancanti, e json_encode trasforma il risultato in un oggetto JSON invece che in un array. array_values() lo rinumera.
Filtrare per chiave con ARRAY_FILTER_USE_KEY
Il terzo argomento sceglie cosa riceve la callback. ARRAY_FILTER_USE_KEY passa solo la chiave. ARRAY_FILTER_USE_BOTH passa il valore e poi la chiave.
Per tenere un insieme fisso di chiavi che conosci già, array_intersect_key($config, array_flip(['db_host', 'db_port'])) fa lo stesso senza callback.
Filtrare un array multidimensionale
La maggior parte dei dati reali è una lista di righe. La callback riceve una riga alla volta, quindi verifichi il campo che ti serve.
Cambia $maxPrice ed eseguilo di nuovo. Per ottenere poi solo i nomi, passa il risultato ad array_column: array_column($affordable, 'name').
Filtrare, poi trasformare, poi ridurre
array_filter sceglie gli elementi, array_map li modifica e array_reduce riduce l'array a un solo valore. array_reduce($array, $callback, $initial) chiama la callback con il totale parziale e l'elemento successivo.
Per una semplice somma, array_sum($totals) è più breve. array_reduce si guadagna il suo posto quando il risultato è qualcos'altro: una stringa, un conteggio per gruppo, la riga più grande.
Errore comune: modificare i valori dentro array_filter
Il valore restituito dalla callback decide solo se un elemento resta. Qualsiasi altra cosa calcoli viene buttata via, quindi questo codice non applica alcun trim:
Trasforma con array_map, poi filtra, e aggiungi array_values quando ti serve una lista pulita.
Domande frequenti
Come rimuovo i valori vuoti da un array in PHP?
Chiama array_filter($array) senza callback: scarta ogni valore falsy ("", null, false, 0, "0", []). Per scartare solo le stringhe vuote e null ma tenere 0, passa una callback: array_filter($array, fn($v) => $v !== '' && $v !== null).
Perché array_filter mantiene le vecchie chiavi?
array_filter non rinumera mai: gli elementi che tiene restano sotto le chiavi originali, quindi una lista può tornare come [0 => 'a', 2 => 'c']. Racchiudila in array_values() per riavere 0, 1, 2, il che fa anche produrre a json_encode un array JSON invece di un oggetto.
Come filtro un array per chiave in PHP?
Passa ARRAY_FILTER_USE_KEY come terzo argomento, e la callback riceve la chiave invece del valore: array_filter($arr, fn($k) => str_starts_with($k, 'db_'), ARRAY_FILTER_USE_KEY). Usa ARRAY_FILTER_USE_BOTH per ricevere il valore e la chiave.
Qual è la differenza tra array_filter e array_map?
array_filter decide quali elementi restano e li restituisce invariati. array_map modifica ogni elemento e restituisce lo stesso numero di elementi. Per fare entrambe le cose, concatenale: array_map('strtoupper', array_filter($arr)).