Вопрос довольно нубский, но что-то последнее время всё чаще дает о себе знать, как при темизации, да и вообще, проверять существование элемента массива?
Например, в случае:
Периодически сыпятся нотайсы: Notice: Undefined index: value, проверишь value — Undefined index: und или Undefined index: field_myfield
Как в общих случаях правильно и коротко всё это проверить?
Комментарии
существование ключа в массиве правильнее проверять через http://php.su/functions/?array-key-exists
А почему правильнее?
isset вернет notice, если отсутствует ключ в массиве. для меня самого загадка, в чем принципиальное различие. но эмпирически было проверено, что для массивов лучше использовать array_key_exists
Да не даёт он вроде никаких нотайсов.
<?php
error_reporting(-1);
//$content['field_myfield']['und'][0]['value'] = TRUE;
print isset($content['field_myfield']['und'][0]['value']) ? 'key exists' : 'key doesn\'t exist';
?>
isset также проверяет наличие значения у переменной.
<?php
$array['value'] = NULL;
isset($array['value']); // FALSE
array_key_exists('value', $array); // TRUE
?>
Да вроде ничем не лучше. Особенно с многомерными массивами.
тогда в чем отличие?
Отличие я написал выше. Мне не понятно, в чём удобство array_key_exists() по сравнению с isset()?
Кстати, а как проверить с помощью array_key_exists() данную переменную $content['field_myfield']['und'][0]['value'], если переменная $content не инициализированна?
нашел)
<?php
$search_array = array('first' => null, 'second' => 4); // возвращает false
isset($search_array['first']); // возвращает true
array_key_exists('first', $search_array);
?>
и то же самое для объектов, надо использовать property_exists, если значение поля содержит NULL
upd. надо будет поэкспериментировать и понять почему все таки notice выскакивает при использовании isset
Про я уже писал выше. В данном контексте это наоборот не удобство.
скорее всего вопрос именно в инициализации. isset вернет notice, а array_key_exists вернет FALSE
Можно пример кода, когда isset вернет notice?
к сожалению не могу воспроизвести. как только появится, отпишусь