2009-05-07 33 views
14

Tôi muốn nhanh chóng xác định xem khóa có tồn tại trong một mảng hay không, để tránh xảy ra lỗi.Cách kiểm tra xem giá trị mảng sâu có hiện diện không

Ví dụ, tôi có thể có một mảng như thế này

$arr['f']['b']['g'] = array('a', 'b', 'c',) ; 

Hoặc mảng có thể không có bất kỳ biến trong $ arr [ 'f'] [ 'b'] tại tất cả:

$arr['f']['x'] = array() ; 

Làm thế nào tôi có thể tránh lặp lại trong một thử nghiệm khi tham chiếu (có lẽ) nội dung của $ arr ['f'] ['b'] ['g']?

if (isset($arr['f']) && 
    isset($arr['f']['b']) && 
    isset($arr['f']['b']['g']) /* ... yawn */) { 
    /* blah */ 
} 

Có cách nào để xác định liệu giá trị mảng mà tôi đang tham chiếu có tồn tại không? Có vẻ như quá dài để phải kiểm tra sự hiện diện của cả giá trị mà tôi tìm kiếm, và tất cả tổ tiên của nó là tốt. Trong một số trường hợp có ý nghĩa, có, nhưng không phải tất cả.

Bằng ví dụ: nó có thể đại diện cho, nói, user-> từng phiên làm> giỏ hàng, nơi tôi muốn có một cách để nhanh chóng kiểm tra xem giỏ có mục, mà không cần phải bao gồm một tấm séc mỗi cho dù người dùng tồn tại, sau đó xem phiên tồn tại, sau đó xem giỏ tồn tại, sau đó ...

chỉnh sửa: tôi không tìm kiếm cho "không một giá trị mảng với một tên quan trọng của 'g' tồn tại", là "không một giá trị mảng với tổ tiên của f => b => g tồn tại".

Trả lời

25

Sau đây sẽ làm việc như bạn mong đợi:

if(isset($a['a']['b']['c'])) 

Nếu bất kỳ của những yếu tố này là không xác định, isset() sẽ trả về false.

+0

Huh! Vâng phát hiện :) –

+3

Chỉ cần làm rõ, điều này cũng an toàn kiểm tra sự tồn tại của '$ a': nó trả về false nếu' $ a' không được thiết lập. –

+0

Wow, chắc chắn trong nhiều năm rằng điều này không hoạt động. Lol. – baldrs

0

Trong các ý kiến ​​của array_search, chúng có mã cho tìm kiếm đa chiều. Nó sẽ giúp.

+0

Cảm ơn bạn đã trả lời. Có hơn một chục khối mã ví dụ trên trang đó (nhiều hơn, tôi không tính), nhưng tôi không thể thấy một trong số chúng sẽ cung cấp giải pháp hiệu quả (hoặc về độ nhạy, hoặc hiệu suất). Sẽ cập nhật câu hỏi để làm rõ những gì tôi đang theo dõi. Cảm ơn một lần nữa! –

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