ในขณะที่คำตอบของ Fosco ไม่ผิดมีกรณีที่จะต้องพิจารณากับเรื่องนี้: อาร์เรย์แบบผสม ลองนึกภาพฉันมีอาร์เรย์ดังนี้
$a = array(
"nice",
"car" => "fast",
"none"
);
ตอนนี้ PHP อนุญาตให้ใช้ไวยากรณ์ประเภทนี้ แต่มีปัญหาหนึ่ง: ถ้าฉันเรียกใช้รหัสของ Fosco ฉันได้รับ0
สิ่งใดที่ไม่ถูกต้องสำหรับฉัน แต่ทำไมจึงเป็นเช่นนั้น
เพราะเมื่อทำเปรียบเทียบระหว่างสตริงและจำนวนเต็มPHP แปลงสตริงจำนวนเต็ม (และนี่คือโง่นะในความคิดของฉัน) ดังนั้นเมื่อarray_search()
การค้นหาสำหรับดัชนีจะหยุดที่คนแรกเพราะเห็นได้ชัดว่าเป็นความจริง("car" == 0)
การตั้งค่าarray_search()
เป็นโหมดเข้มงวดจะไม่ช่วยแก้ปัญหาได้เพราะarray_search("0", array_keys($a))
จะส่งคืนค่าเท็จแม้ว่าองค์ประกอบที่มีดัชนี 0 อยู่
ดังนั้นโซลูชันของฉันเพียงแปลงดัชนีทั้งหมดarray_keys()
เป็นสตริงแล้วเปรียบเทียบอย่างถูกต้อง:
echo array_search("car", array_map("strval", array_keys($a)));
พิมพ์1
ซึ่งถูกต้อง
แก้ไข:
ตามที่ฌอนชี้ให้เห็นในความคิดเห็นด้านล่างสิ่งเดียวกันจะใช้กับค่าดัชนีถ้าคุณบังเอิญค้นหาดัชนี int เช่นนี้
$a = array(
"foo" => "bar",
"nice",
"car" => "fast",
"none"
);
$ind = 0;
echo array_search($ind, array_map("strval", array_keys($a)));
คุณจะได้รับ0
ซึ่งเป็นสิ่งที่ผิดเสมอดังนั้นวิธีแก้ปัญหาก็คือการแปลงดัชนี (ถ้าคุณใช้ตัวแปร) กับสตริงเช่นนี้:
$ind = 0;
echo array_search((string)$ind, array_map("strval", array_keys($a)));