Menu

PHP array_filter(): filtrare un array per valore o chiave

array_filter($array, $callback) tiene gli elementi per cui la callback restituisce true. Impara a rimuovere i valori vuoti, filtrare per chiave con ARRAY_FILTER_USE_KEY, reindicizzare il risultato con array_values e sommare con array_reduce.

Questa pagina include editor eseguibili: modifica, esegui e vedi subito l'output.

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)).

Illustrazione dei linguaggi di programmazione di Coddy

Impara a programmare con Coddy

INIZIA