数组大小> 0虽然没有设置密钥

时间:2011-09-23 10:02:54

标签: php arrays null ternary-operator array-key

简短的问题。

给出以下示例:

$arr = array();
$arr[0] = false ?: NULL;
var_dump($arr[0]);
var_dump($arr[1]);
var_dump(isset($arr[0]));
var_dump(isset($arr[1]));
var_dump(count($arr));

结果输出为:

NULL 
NULL 
bool(false) 
bool(false) 
int(1)

为什么生成的数组的大小为1而不是0,是否有任何方法可以防止在使用三元运算符时发生这种情况?这是一个错误还是预期的行为?

不过,我正在运行php 5.3.3-7,但暂时无法在不同的版本上测试它。

1 个答案:

答案 0 :(得分:2)

如果未设置变量, isset()将返回false,或变量等于 NULL。在这种情况下,$arr[0]会明确设置为NULL。这在语义上与实际unset()不同:变量仍然设置,它只是设置为空值。

简而言之:按预期工作。这是不同功能的不幸副作用。

作为旁注,在此数组上使用foreach实际上也会返回0 => NULL键/值对,正如您对count()返回的值所期望的那样。