2013-06-07 35 views
8

Tôi hiện đang sử dụng như sau:Kiểm tra xem tất cả các phím nhiều mảng PHP tồn tại

$a = array('foo' => 'bar', 'bar' => 'foo'); 

    if(isset($a['foo']) && isset($a['bar'])){ 
     echo 'all exist'; 
    } 

Tuy nhiên, tôi sẽ có một vài phím mảng hơn foobar rằng tôi phải kiểm tra. Có cách nào hiệu quả hơn để kiểm tra mỗi khóa được yêu cầu hay không bằng cách thêm isset cho mỗi mục nhập được yêu cầu?

+0

bỏ qua rằng cờ trùng lặp càng tốt; tôi chỉ nhận ra sự khác biệt tinh tế. –

Trả lời

23

Bạn có thể kết hợp chúng trong một đơn isset() gọi:

if (isset($a['foo'], $a['bar']) { 
    echo 'all exist'; 
} 

Nếu bạn có một mảng của tất cả các phím được yêu cầu, bạn có thể làm:

if (count(array_diff($required_keys, array_keys($a))) == 0) { 
    echo 'all exist'; 
} 
+0

Nhận lỗi: 'Không thể sử dụng hàm trả về giá trị trong ngữ cảnh viết' cho dòng' if (empty (array_diff ($ required_keys, array_keys ($ a))) {'. – Mooseman

+0

Rõ ràng' empty() 'yêu cầu đối số của nó thay đổi để sử dụng 'count()' – Barmar

+0

Chỉ cần những gì tôi cần. Cảm ơn! – Mooseman

1

Bạn có thể tạo một mảng của tất cả các mục bạn muốn kiểm tra, sau đó lặp lại tất cả các mục nhập đó.

$entries = array("foo", "bar", "baz"); 
$allPassed = true; 

foreach($entries as $entry) 
{ 
    if(!isset($a[$entry])) 
    { 
     $allPassed = false; 
     break; 
    } 
} 

Nếu $ allPassed = true, tất cả đều tốt - sai nghĩa là một hoặc nhiều thất bại.

0

Có lẽ sạch là

if (array_diff(['foo', 'bar'], array_keys($a))) === []) { 
    echo 'all exist'; 
} 
Các vấn đề liên quan