2015-07-24 2 views
0

У меня есть два массива: $values и $availableKeys. Я хочу исключить исключение, если $values содержит недопустимые ключи. На данный момент я запускаю этот код.Проверка ключей массива php-массива

foreach ($values as $key => $value) { 
     if (!in_array($key, $availableKeys)) { 
      throw new RuntimeException(
       'Not allowed key' 
      ); 
     } 
    } 

Существует лучший способ проверки массива? Вопрос Validate PHP Array Key>Value не отвечает на мой вопрос.

+1

* не удовлетворяет меня * не является PHP ошибка. Получаете ли вы их, когда запускаете код? – D4V1D

+0

Я обновляю вопрос, удаляя это предложение. Дело в коде: «Существует лучший способ проверки массива?» – sensorario

ответ

1
if (array_diff_key($values, array_flip($availableKeys))) { 
    throw new RuntimeException(..); 
} 
0

Я могу только сказать, что тест, этот ключ присутствует в массиве, быстрее. Поэтому make array $ availableKeys не [key1, key2 ...], а [key1 => 1, key2 => 1 ...]. то есть, перевернуть текущий массив

foreach ($values as $key => $value) { 
     if (!isset($availableKeys[$key])) { 
      throw new RuntimeException(
       'Not allowed key' 
      ); 
     } 
    } 
+0

Да, возможно, это может быть хорошим улучшением. – sensorario

0

Вы можете использовать array_diff() для поиска недозволенных ключей:

$allowedKeys = array("a","b","c"); 
$test = array("a" => "asdf", "c" => "asdf", "d" => "asdf"); 
$notAllowedKeys = array_diff(array_keys($test), $allowedKeys); 
if($notAllowedKeys) { 
    print "One or more keys are not allowed"; 
    print_r($notAllowedKeys); 
} 

Живой пример:. http://3v4l.org/hi2sP

+0

Не используйте 'empty' для переменных, которые гарантированно будут существовать. 'if ($ notAllowedKeys)' делает то же самое без необходимости подавлять отчет об ошибках. – deceze

+0

Почему не следует использовать пустые()? array_diff() возвращает пустой массив, если разница не найдена, поэтому почему бы не проверить пустой массив с пустым()? – Typoheads

+1

Потому что вы ** бесполезно подавляете отчет об ошибках. ** См. [Окончательное руководство по PHP-номеру и пустое] (http://kunststube.net/isset/) – deceze

Смежные вопросы