2012-07-05 44 views
5

Tôi đã viết đoạn mã sau để kiểm tra xem một mảng là kết hợp hay khôngSo sánh mảng của các phím của mảng kết hợp để nguyên mảng lập chỉ mục

function is_associative($arr) { 
    $arr = array_keys($arr); 
    return $arr != array_keys($arr); 
} 

Nó trả về true cho mảng như:

array("a" => 5,"b" => 9); 

và sai cho các mảng số

Nhưng không trả về giá trị đúng cho mảng kết hợp với thành phần đơn lẻ như:

array("a" =>9); 

Tại sao nó trả về sai cho mảng kết hợp với phần tử đơn?

+1

Bạn nên sử dụng 'array_diff' – alfasin

Trả lời

8

Bạn cần phải sử dụng !== trong so sánh của bạn:

return $arr !== array_keys($arr); 

này tạo ra correct output của cả hai trong số đó là sự thật.

Nếu không loại tung hứng sẽ xem xét các giá trị cho mảng yếu tố duy nhất là bình đẳng:

array(1) { [0]=> string(1) "a" } 
array(1) { [0]=> int(0) } 

Ở đây, "a" == 0 là đúng (như "a" là âm thầm đúc 0), nhưng "a" === 0 là sai.

+0

có vấn đề: Cảm ơn bạn –

+0

Tại sao chúng không cùng loại khi nó là mảng phần tử đơn? –

+1

@JinuJD - Tôi đã cập nhật câu trả lời của mình với mô tả rõ ràng hơn về những gì đang diễn ra – nickb

Các vấn đề liên quan