Trong khi câu trả lời của Fosco không sai, có một trường hợp được xem xét với câu hỏi này: mảng hỗn hợp. Hãy tưởng tượng tôi có một mảng như thế này:
$a = array(
"nice",
"car" => "fast",
"none"
);
Bây giờ, PHP cho phép loại cú pháp này nhưng nó có một vấn đề: nếu tôi chạy mã của Fosco, tôi nhận được lỗi 0
đó , nhưng tại sao điều này xảy ra?
Bởi vì khi thực hiện so sánh giữa các chuỗi và số nguyên, PHP chuyển đổi chuỗi thành số nguyên (theo ý kiến của tôi là hơi ngu ngốc), vì vậy khi array_search()
tìm kiếm chỉ mục, nó dừng lại ở lần đầu tiên vì rõ ràng ("car" == 0)
là đúng .
Đặt array_search()
ở chế độ nghiêm ngặt sẽ không giải quyết được vấn đề vì sau đó array_search("0", array_keys($a))
sẽ trả về false ngay cả khi một phần tử có chỉ số 0 tồn tại.
Vì vậy, giải pháp của tôi chỉ chuyển đổi tất cả các chỉ mục từ array_keys()
thành chuỗi và sau đó so sánh chúng một cách chính xác:
echo array_search("car", array_map("strval", array_keys($a)));
In 1
, đó là chính xác.
EDIT:
Như Shaun đã chỉ ra trong bình luận bên dưới, điều tương tự cũng áp dụng cho giá trị chỉ mục, nếu bạn tình cờ tìm kiếm một chỉ mục int như thế này:
$a = array(
"foo" => "bar",
"nice",
"car" => "fast",
"none"
);
$ind = 0;
echo array_search($ind, array_map("strval", array_keys($a)));
Bạn sẽ luôn nhận được 0
, đó là sai, vì vậy giải pháp sẽ là truyền chỉ mục (nếu bạn sử dụng một biến) thành một chuỗi như thế này:
$ind = 0;
echo array_search((string)$ind, array_map("strval", array_keys($a)));