PHP Array Search: Una Guida Completa
array_search() in PHP trova la posizione di un valore in un array e restituisce la chiave corrispondente. Guida completa con esempi.
array_search() trova il primo elemento in un array uguale a un valore dato e restituisce la chiave di quell'elemento. Se non trova corrispondenze, restituisce false. Usala quando hai un valore e hai bisogno di sapere dove si trova nell'array — ad esempio, l'indice da passare a unset(), array_splice(), o a una ricerca successiva.
Funziona sia su array indicizzati che su array associativi e restituisce la chiave reale, che può essere 0, un intero non sequenziale o una string. Questa pagina illustra la sintassi, il confronto loose vs. strict, il problema false-vs-0, come trovare tutti i risultati (non solo il primo), e quando conviene usare in_array() o array_keys().
Sintassi
array_search(mixed $needle, array $haystack, bool $strict = false): int|string|false$needle— il valore che stai cercando.$haystack— l'array in cui cercare.$strict— opzionale. Quando èfalse(valore predefinito), i valori vengono confrontati in modo loose (==), quindi0,"0",0.0e persinofalsepossono corrispondersi. Quando ètrue, il confronto è strict (===), corrispondente solo quando sia il tipo che il valore sono identici. Passa sempretruequando l'array contiene tipi misti.
La funzione restituisce la chiave del primo elemento corrispondente, o false se il valore non è presente.
Utilizzo di base
Il caso più semplice: cercare in un array indicizzato e stampare la chiave in cui si trova il valore.
Qui 3 si trova all'indice 2, quindi lo script stampa Value was found at key: 2. Nota che array_search() restituisce la chiave effettiva, non la posizione — per un array re-indicizzato o associativo queste non sono la stessa cosa.
Ricerca in array associativi
array_search() è più utile sugli array associativi, dove restituisce una chiave string che puoi usare per recuperare dati correlati:
<?php
$users = [
"admin" => "Alice",
"editor" => "Bob",
"viewer" => "Cara",
];
$role = array_search("Bob", $users);
echo "Bob's role is: $role"; // editor
?>Questo stampa Bob's role is: editor. Se hai solo bisogno di sapere se un valore esiste — non la sua chiave — preferisci in_array(), che è più chiaro e leggermente più veloce.
Confronto strict vs. loose
Per impostazione predefinita array_search() confronta in modo loose (==), il che può produrre corrispondenze sorprendenti quando i tipi differiscono. Impostando il terzo argomento a true si forza il confronto strict (===), in modo che anche il tipo debba corrispondere:
In questo esempio abbiamo creato un array chiamato $array che contiene cinque elementi, incluso un valore string "3". Impostiamo poi il valore da cercare nell'array a 3. La funzione array_search() viene utilizzata per cercare il valore nell'array, con il parametro strict impostato a true. Il risultato è memorizzato nella variabile $result. Infine, usiamo un'istruzione if per verificare se il valore è stato trovato nell'array o meno. Se il valore è stato trovato, viene restituita la chiave. Se il valore non è stato trovato, viene visualizzato un messaggio che indica che il valore non è nell'array. Nota che array_search() restituisce false quando il valore non viene trovato. Poiché 0 è una chiave valida, devi usare il confronto strict (=== false) per distinguere correttamente tra un risultato non trovato e una chiave 0.
Il problema false vs. 0
Il bug più comune con array_search() è fraintendere il valore restituito. Poiché un elemento trovato può legittimamente avere chiave 0, e "non trovato" restituisce false, un controllo loose come if (!$result) li tratta allo stesso modo. Confronta sempre con === false:
<?php
$names = ["Alice", "Bob", "Cara"];
// Alice is at key 0 — a real result, but falsy!
$key = array_search("Alice", $names);
if ($key === false) {
echo "Not found";
} else {
echo "Found at key: $key"; // Found at key: 0
}
?>Questo stampa Found at key: 0. Un semplice if (!$key) avrebbe erroneamente riportato "Not found".
Trovare tutte le chiavi corrispondenti
array_search() si ferma alla prima corrispondenza. Per ottenere le chiavi di tutti gli elementi uguali a un valore, usa array_keys() con il suo argomento di ricerca opzionale:
<?php
$scores = [10, 20, 30, 20, 50];
echo array_search(20, $scores); // 1 (first match only)
echo "\n";
print_r(array_keys($scores, 20)); // Array ( [0] => 1 [1] => 3 )
?>array_search() restituisce 1, mentre array_keys($scores, 20) restituisce ogni indice che contiene 20 (1 e 3).
Quando usare quale funzione
| Obiettivo | Funzione migliore |
|---|---|
| Ottenere la chiave del primo valore corrispondente | array_search() |
| Verificare solo se un valore esiste | in_array() |
| Ottenere tutte le chiavi per un valore | array_keys() |
| Verificare se esiste una chiave | array_key_exists() |
Riepilogo
array_search() restituisce la chiave del primo elemento uguale al tuo valore, o false se non ne esiste nessuno. Ricorda gli aspetti essenziali: passa strict = true quando l'array contiene tipi misti, verifica sempre il risultato con === false, e ricorri a in_array() o array_keys() quando hai bisogno di una risposta sì/no o di tutte le chiavi corrispondenti.