我有一个可以有一个键"d"
的数组。与"d"
关联的值来自mysql查询。当它是
"d"
的值
NULL
"NULL"
""
0
所以我有这个场景:
// should show
$a = array("a"=>1,"b"=>NULL,"c"=>"zzz");
if ($a["d"] >= 0) {
echo "show";
}
// should show
$a = array("a"=>1,"b"=>NULL,"c"=>"zzz","d"=>NULL);
if ($a["d"] >= 0) {
echo "show";
}
似乎php在NULL
时将0
识别为"d"=>NULL
。在不使用array_key_exists
的情况下测试这些条件的最佳方法是什么?
答案 0 :(得分:3)
您认为php将值解释为0
的原因是因为当您进行比较时,您正在使用>=
。
>=
会将左侧值标记为右侧值的类型。所以比较看起来更像是
((int) $a["d"]) >= 0
和null,当转换为int时,为0。
您还可以使用
检查是否存在该数组索引isset($a['d'])
或
empty($a['d'])
这是一种松散类型的语言的缺点,如果你不完全理解什么是最重要的话会让人感到困惑。 check this out for a bunch more information
答案 1 :(得分:0)
isset是你的朋友
<?php
$ar_list = array(
array('d' => null),
array('d' => 0),
array('d' => 12),
);
foreach ($ar_list as $ar) {
if (isset($ar['d']) && $ar['d'] >= 0) {
echo "{$ar['d']}\n";
};
};
以上示例将输出:
0
12