Предположим, у меня есть массив $ arr. Возможно , что у него есть элемент с ключом с именем 'music' ($ arr ['music']), и я хочу проверить, равно ли это значение "классическому":
if($arr['music'] === 'classical'){
//do something cool
}
Однако возможно, что $ arr не имеет значения с ключом music. Поэтому, чтобы избежать ошибки PHP, я делаю следующее:
if($arr['music']){
if($arr['music'] === 'classical'){
//do something cool
}
}
Это кажется совершенно нелепым. По-моему, если $ arr ['music'] не существует, то он ОПРЕДЕЛЕННО не равен 'классике'. Есть ли способ избежать первой проверки существования ключа до проверки его значения?
3 ответа
Если ключ не существует, будет выдана ошибка (или предупреждение).
Поэтому, чтобы это произошло, вы должны проверить, существует ли .
Вот два способа сделать это:
Вы можете проверить это с помощью isset()
(что будет неверным, если $arr['music'] == null
):
if(isset($arr['music']) && $arr['music'] === 'classical'){
//do something cool
}
Или используйте array_key_exists()
:
if(array_key_exists('music', $arr) && $arr['music'] === 'classical'){
//do something cool
}
null
bc, если это так null
isset
вернет false
, тогда как array_key_exists
вернет true
Я думаю, что array_key_exists () отвечает вашим потребностям.
Есть другое решение. Некоторым он не нравится, потому что в нем используется знак «@», но я считаю его очень удобочитаемым, поэтому использую его.
if (@$arr['music'] === 'classical') ...
Это все. Для меня лучшее читаемое решение.
Похожие вопросы
Новые вопросы
php
PHP — это открытый, мультипарадигмальный, динамически типизированный и интерпретируемый язык сценариев, изначально разработанный для веб-разработки на стороне сервера. Используйте этот тег для вопросов о программировании на языке PHP.
0
,'0'
,''
иnull
. При сравнении любого из них с несуществующей переменной все будет иметь значение true, что может НЕ быть тем, что вы хотели.