数组大小> 0 虽然没有设置密钥
简短的问题。
给出以下示例:
$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,但目前无法在不同版本上测试它。
short question.
given the following example:
$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));
the resulting output is:
NULL
NULL
bool(false)
bool(false)
int(1)
why does the resulting array have a size of 1 instead of 0 and is there any way to prevent this from happening when using the ternary operator? is it a bug or intended behaviour?
btw, I'm running php 5.3.3-7, but can't test it on a different version at the moment.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
如果未设置变量,
isset()
返回 false,或者变量等于NULL
。在本例中,$arr[0]
显式设置为NULL
。这在语义上与实际unset()
不同:变量仍然被设置,它只是设置为空值。简而言之:按预期工作。这是不同函数执行略有不同的操作所带来的不幸的副作用。
作为旁注,在此数组上使用
foreach
实际上会返回0 =>; NULL
键/值对,正如您可能从count()
返回的值中所期望的那样。isset()
returns false if the variable is not set, or the variable is equal toNULL
. In this case,$arr[0]
is explicitly set toNULL
. This is semantically different to actuallyunset()
ing it: the variable is still set, it's just set to an empty value.In short: working as intended. It's an unfortunate side effect of different functions doing slightly different things.
As a sidenote, using
foreach
on this array will actually return the0 => NULL
key/value pair as well, as you might expect from the value returned bycount()
.