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

发布于 2024-12-06 12:20:39 字数 411 浏览 0 评论 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

差↓一点笑了 2024-12-13 12:20:39

如果未设置变量,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 to NULL. In this case, $arr[0] is explicitly set to NULL. This is semantically different to actually unset()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 the 0 => NULL key/value pair as well, as you might expect from the value returned by count().

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文