2013-06-07 3 views
8

настоящее время я использую следующие:Проверьте все несколько ключей PHP массива существуют

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

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

Однако, у меня будет еще несколько ключей массива, чем foo и bar, что я должен проверить для. Есть ли более эффективный способ проверить каждый необходимый ключ, чем добавлять isset для каждой требуемой записи?

+0

игнорировать, что возможный дубликат флага; я просто понял тонкую разницу. –

ответ

23

Вы можете объединить их в один isset() вызова:

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

Если у вас есть массив всех ключей, которые требуются, вы можете сделать:

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

Получение ошибки: 'Невозможно использовать возвращаемое значение функции в контексте записи' для строки' if (empty (array_diff ($ required_keys, array_keys ($ a))) {'. – Mooseman

+0

По-видимому,' empty() 'требует своего аргумента чтобы быть переменной, а не выражением. Изменено для использования 'count()'. – Barmar

+0

Просто то, что мне нужно. Спасибо! – Mooseman

1

Вы можете создать массив всех записей, которые вы хотите проверить, а затем перебрать все из них.

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

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

Если $ allPassed = true, все являются хорошими - false означает, что один или несколько не удалось.

0

Вероятно, чистейшая является

if (array_diff(['foo', 'bar'], array_keys($a))) === []) { 
    echo 'all exist'; 
} 
Смежные вопросы