php array - проблема с сохранением значения 0

1

У меня есть массив, который хранит числовые значения. Проблема в том, когда я хочу сохранить значение 0:

.... 
$gradePoints = 0;
$students[$var1][$var2] = $gradePoints;
....

Чтобы проверить, что значение сохранено:

echo $students[$var1][$var2];

возвращает 0... так что значение 0 было успешно сохранено в массиве.

Однако позже, когда я ищу массив:

$value= isset($students[$var1][$var2]) ? $students[$var1][$var2] : '';

if ($value <> '')
{
do something;
}

Если $value - это ничего, кроме 0, это нормально, но php похоже, пропускает значение 0. Если я изменю

$gradePoints = 0;

в

$gradePoints = 0.1;

все хорошо. Может ли кто-нибудь объяснить, почему $value <> '' работает для всех значений, отличных от 0?

  • 0
    «Если вы сравниваете число со строкой или сравнение включает числовые строки, то каждая строка преобразуется в число, и сравнение выполняется численно». nl1.php.net/manual/en/language.operators.comparison.php ps, так что я предполагаю, что пустая строка преобразуется в 0?
  • 0
    Забудьте об isset . Просто попробуйте $value = 0; if ($value <> '') { do something }
Показать ещё 2 комментария
Теги:
arrays

2 ответа

0
Лучший ответ

Используйте этот оператор (не идентичный, он также будет проверять тип переменной):

$value=0;



if ($value !== '')
{
//do something
}

У вас есть проблемы из-за type juggling , как описано здесь: http://php.net/manual/en/language.operators.comparison.php

  • 0
    LOL mr Down Voter, пожалуйста, предоставьте объяснение ... Если вы не заметили, я фактически предоставил ответ в первом комментарии к этому сообщению, ДО любого другого ответа (включая мой) ... Я думаю, что я объяснил проблему, и сделал то, что должно быть сделано, в этом случае ... Если OP хочет сравнить значение с пустой строкой (по своим собственным причинам), если $ value равно 0 - это будет работать. Вы немного эгоистичны ... :)
3

Изменить:

$value= isset($students[$var1][$var2]) ? $students[$var1][$var2] : '';

if ($value <> '')

Для того, чтобы:

$value = isset($students[$var1][$var2]) ? $students[$var1][$var2] : false;

if ($value !== false)

Конечно, есть и другие способы сделать это. В нижней строке вы хотите избежать сравнения нулей и пустых строк, они будут оцениваться как одно и то же. Вместо этого используйте === и !== для точного сравнения.

См. Здесь для получения дополнительной информации: http://nl1.php.net/manual/en/language.operators.comparison.php

  • 0
    Хотя я поставил галочку, я боюсь, что это не сработает - хотя ($ value! == ''), как предполагает Nevermind, это так.
  • 0
    Если вы установите значение в false, а затем проверьте !== false , это абсолютно работает. Покажите мне свой код, если у вас возникли проблемы.
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню