W3docs

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 (==), quindi 0, "0", 0.0 e persino false possono corrispondersi. Quando è true, il confronto è strict (===), corrispondente solo quando sia il tipo che il valore sono identici. Passa sempre true quando 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.

php— editable, runs on the server

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:

php— editable, runs on the server

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

ObiettivoFunzione migliore
Ottenere la chiave del primo valore corrispondentearray_search()
Verificare solo se un valore esistein_array()
Ottenere tutte le chiavi per un valorearray_keys()
Verificare se esiste una chiavearray_key_exists()

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.

Esercizio

Pratica
Cosa fa la funzione array_search() in PHP?
Cosa fa la funzione array_search() in PHP?
Was this page helpful?