Trong khi câu trả lời của Fosco không sai, có một trường hợp được coi là với trường hợp 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 nhưng nó có một vấn đề: nếu tôi chạy mã Fosco của tôi nhận được 0
đó là sai đối với tôi, 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 xâu kí tự sang số nguyên (và đây là kinda ngu ngốc theo ý kiến của tôi), vì vậy khi array_search()
tìm kiếm các chỉ số nó dừng lại ở một đầu tiên bởi vì rõ ràng ("car" == 0)
là đúng.
Đặt array_search()
thành chế độ nghiêm ngặt sẽ không giải quyết được sự cố vì sau đó array_search("0", array_keys($a))
sẽ trả về false ngay cả khi một phần tử có chỉ mục 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ỉ số từ array_keys()
thành các 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)));
Prints 1
đó là chính xác
PHP có đảm bảo thứ tự của một mảng kết hợp không? –
@KevinBurke Nó sẽ không sắp xếp lại nó trừ khi bạn sử dụng một chức năng sắp xếp. Bạn không chắc chắn về loại bảo đảm mình đang tìm kiếm, nhưng nó không giống như mô hình JavaScript, nơi không có thứ tự tĩnh đối với mảng kết hợp. – Fosco
Các chỉ mục được cung cấp bởi "array_keys" sẽ không nhất thiết phải khớp với chỉ mục của mảng ban đầu. Ví dụ, nếu bạn đã thay đổi mảng bằng cách sử dụng "unset" hoặc một số hàm khác, sẽ có một khoảng trống còn lại trong chỉ mục của mảng ban đầu, nhưng array_keys sẽ tạo ra một mảng mới. – SEoF