Mentre la risposta di Fosco non è sbagliata, c'è un caso da considerare con questo: matrici miste. Immaginate Ho un array come questo:
$a = array(
"nice",
"car" => "fast",
"none"
);
Ora, PHP permette questo tipo di sintassi, ma ha un problema: se corro il codice di Fosco ottengo 0
che è sbagliato per me, ma perché questo accade?
Perché quando si fa il confronto tra stringhe e interi PHP converte le stringhe in numeri interi (e questo è un pò stupida a mio parere), in modo che quando array_search()
ricerche per l'indice si ferma al primo perché a quanto pare ("car" == 0)
vale.
L'impostazione di array_search()
in modalità rigorosa non risolverà il problema, poiché in tal caso array_search("0", array_keys($a))
restituirà false anche se esiste un elemento con indice 0.
Quindi la mia soluzione solo converte tutti gli indici da array_keys()
alle corde e poi li confronta in modo corretto:
echo array_search("car", array_map("strval", array_keys($a)));
Stampe 1
che è corretto
PHP garantisce l'ordine di un array associativo? –
@KevinBurke Non verrà riordinato a meno che non si usi una funzione di ordinamento. Non sei sicuro del tipo di garanzia che stai cercando, ma non è come il modello JavaScript in cui non esiste un ordine statico per gli array associativi. – Fosco
Gli indici forniti da "array_keys" non corrispondono necessariamente all'indice dell'array originale. Ad esempio, se hai modificato l'array usando "unset" o un numero di altre funzioni, rimarrà un intervallo nell'indice dell'array originale, ma array_keys produrrà un nuovo array. – SEoF