1

简短的问题。

给出以下示例:

$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,但目前无法在其他版本上对其进行测试。

4

1 回答 1

2

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

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

作为旁注,foreach在这个数组上使用实际上也将返回0 => NULL键/值对,正如您对count().

于 2011-09-23T10:07:49.357 回答