可能的PHP数组ID不存在为0吗?

时间:2014-09-26 19:47:36

标签: php arrays

我有一个可以有一个键"d"的数组。与"d"关联的值来自mysql查询。当它是

时,我不想显示"d"的值
  1. NULL
  2. "NULL"
  3. ""
  4. 小于0
  5. 所以我有这个场景:

    // 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的情况下测试这些条件的最佳方法是什么?

2 个答案:

答案 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