У меня есть массив, который хранит числовые значения. Проблема в том, когда я хочу сохранить значение 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?
Используйте этот оператор (не идентичный, он также будет проверять тип переменной):
$value=0;
if ($value !== '')
{
//do something
}
У вас есть проблемы из-за type juggling
, как описано здесь: http://php.net/manual/en/language.operators.comparison.php
Изменить:
$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
!== false
, это абсолютно работает. Покажите мне свой код, если у вас возникли проблемы.
isset
. Просто попробуйте$value = 0; if ($value <> '') { do something }