Menu

PHP array_search(): trovare la chiave di un valore

array_search($value, $array) restituisce la chiave del primo elemento uguale a $value, oppure false se non ce n'è nessuno. Dato che la chiave può essere 0, verifica sempre il risultato con !== false. Impara le ricerche strette, come trovare ogni corrispondenza, cercare in un array multidimensionale con array_column e le ricerche case-insensitive.

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

array_search($value, $array) restituisce la chiave del primo elemento uguale a $value, oppure false se nessun elemento corrisponde. Dato che una chiave trovata può essere 0, verifica il risultato con !== false, come in if (($key = array_search('pear', $fruits)) !== false).

Se ti serve solo un sì o un no, in_array() lo dice direttamente. array_search() serve quando devi sapere dove si trova il valore, per esempio per modificarlo o rimuoverlo.

La trappola 0 vs false

Il bug più comune con array_search(): il valore è il primo elemento, la sua chiave è 0, e if ($key) tratta 0 come falso. Il codice dice "non trovato" per un valore che è proprio lì. Confronta con !== false, che corrisponde solo a un vero false.

!= false ha lo stesso bug di if ($key), perché 0 == false è true. Solo l'operatore stretto li distingue.

Ricerca stretta

Come in_array(), array_search() confronta con == a meno che tu non passi true come terzo argomento. La modalità debole permette a una stringa di trovare un numero e a null di trovare 0, il che restituisce una chiave inattesa.

Trovare tutte le chiavi con un valore

array_search() si ferma alla prima corrispondenza. array_keys($array, $value) restituisce ogni chiave corrispondente come array; aggiungi true per un confronto stretto. Un risultato vuoto significa nessuna corrispondenza, quindi non c'è confusione tra 0 e false.

Cercare in un array multidimensionale con array_column

array_search() non guarda dentro gli array annidati. Per una lista di righe, estrai con array_column() il campo che stai cercando; le posizioni in quella lista corrispondono ai numeri di riga, quindi il risultato è l'indice della riga.

array_column() rinumera il suo output da 0, quindi tutto torna solo quando le righe sono numerate 0, 1, 2 senza buchi. Dopo unset() o array_filter() la numerazione ha dei buchi; esegui prima array_values() sulle righe oppure usa la ricerca per chiave delle ultime due righe. array_column() approfondisce la forma con la chiave indice.

Ricerca case-insensitive

array_search() confronta le stringhe esattamente. Converti in minuscolo entrambi i lati per ignorare maiuscole e minuscole. array_map() mantiene le chiavi, quindi la chiave che ottieni è quella dell'array originale.

Cercare e poi sostituire o rimuovere

Il motivo abituale per cercare è agire sull'elemento trovato. Con la chiave in mano, assegna per modificarlo o usa unset() per rimuoverlo, e proteggiti sempre prima con !== false: unset($arr[false]) rimuove in silenzio l'elemento con chiave 0.

Domande frequenti

Cosa restituisce array_search se il valore non viene trovato?

false. Quando il valore viene trovato restituisce la sua chiave, che può essere 0 o una stringa vuota, quindi verifica il risultato con !== false, mai con if ($key) o != false.

Perché il mio controllo con array_search fallisce per il primo elemento?

Il primo elemento di un array indicizzato ha chiave 0, e 0 è falsy. if (array_search('a', ['a', 'b'])) entra quindi nel ramo di valore non trovato. Scrivi if (array_search('a', $arr) !== false).

Come trovo tutte le chiavi di un valore in PHP?

array_search() si ferma alla prima corrispondenza. array_keys($array, $value, true) restituisce ogni chiave il cui valore corrisponde, come array (vuoto quando non ce ne sono).

Come cerco in un array multidimensionale in PHP?

Estrai il campo in una lista piatta e cerca lì: $i = array_search('ada@example.com', array_column($users, 'email'));, poi leggi la riga come $users[$i]. Funziona quando le righe sono numerate 0, 1, 2; altrimenti usa un ciclo foreach.

Illustrazione dei linguaggi di programmazione di Coddy

Impara a programmare con Coddy

INIZIA