Fosco'nun yanıtı yanlış olmasa da, bununla birlikte düşünülmesi gereken bir durum var : karışık diziler. Böyle bir dizi var düşünün:
$a = array(
"nice",
"car" => "fast",
"none"
);
Şimdi, PHP bu tür bir sözdizimine izin veriyor, ancak bir problemi var: Fosco'nun kodunu çalıştırırsam benim için 0 yanlış olanı alıyorum , ama neden oluyor?
Çünkü dizeler ve tamsayılar arasında karşılaştırmalar yaparken PHP dizeleri tamsayılara dönüştürür (ve bu benim görüşüme göre biraz aptalca), bu yüzden array_search()indeks aradığında ilkinde durur çünkü görünüşe ("car" == 0) göre doğrudur . Sıkı moda
ayarlamak array_search()sorunu çözmez çünkü array_search("0", array_keys($a))dizin 0'a sahip bir öğe olsa bile yanlış döndürür.
Benim çözümüm sadece tüm dizinleri array_keys()dizelere dönüştürür ve sonra doğru bir şekilde karşılaştırır:
echo array_search("car", array_map("strval", array_keys($a)));
1Doğru olan baskılar .
DÜZENLEME:
Shaun, aşağıdaki yorumda belirtildiği gibi, böyle bir int dizini ararsanız aynı şey dizin değeri için de geçerlidir:
$a = array(
"foo" => "bar",
"nice",
"car" => "fast",
"none"
);
$ind = 0;
echo array_search($ind, array_map("strval", array_keys($a)));
Her zaman alırsınız 0, bu yanlıştır, böylece çözüm dizini (bir değişken kullanırsanız) şöyle bir dizeye dökmek olacaktır:
$ind = 0;
echo array_search((string)$ind, array_map("strval", array_keys($a)));