Mentre la risposta di Fosco non è sbagliata, c'è un caso da considerare con questo: array misti. Immagina di avere un array come questo:
$a = array(
"nice",
"car" => "fast",
"none"
);
Ora, PHP consente questo tipo di sintassi ma ha un problema: se eseguo il codice di Fosco ottengo 0
quale è sbagliato per me, ma perché succede?
Perché quando si fa un confronto tra stringhe e numeri interi PHP converte le stringhe in numeri interi (e questo è un po 'stupido secondo me), quindi quando si array_search()
cerca l'indice si ferma al primo perché apparentemente ("car" == 0)
è vero .
L'impostazione array_search()
in modalità rigorosa non risolverà il problema perché array_search("0", array_keys($a))
restituirebbe false anche se esiste un elemento con indice 0.
Quindi la mia soluzione converte solo tutti gli indici da array_keys()
in stringhe e poi li confronta correttamente:
echo array_search("car", array_map("strval", array_keys($a)));
Stampe 1
, che è corretto.
EDIT:
Come ha sottolineato Shaun nel commento qui sotto, la stessa cosa si applica al valore dell'indice, se ti capita di cercare un indice int come questo:
$a = array(
"foo" => "bar",
"nice",
"car" => "fast",
"none"
);
$ind = 0;
echo array_search($ind, array_map("strval", array_keys($a)));
Otterrai sempre 0
, il che è sbagliato, quindi la soluzione sarebbe quella di lanciare l'indice (se usi una variabile) su una stringa come questa:
$ind = 0;
echo array_search((string)$ind, array_map("strval", array_keys($a)));