PHP是否定义访问序列数组中未初始化位置的结果


Does PHP define the result of accessing an uninitialized location in a sequential array?

我正在研究另一个问题(即,不是本文标题中描述的问题),在Wordpress Development Stack Exchange上发现了这个答案,它似乎有编码错误。

$thisindex = array_search($post->ID, $ids);
$previd = $ids[$thisindex-1];
$nextid = $ids[$thisindex+1];

在任何其他语言中,这肯定是一个错误,因为加或减1可能会访问未初始化的位置。

那么,访问PHP中未初始化的数组位置的结果是否未定义?如果没有,那么结果应该是什么?

PHP并没有真正的序列数组。它可能在内部使用顺序数据结构,但对程序员来说这并不重要。

在PHP中,数组是键值映射,其中键可以是整数或字符串。

如果您试图访问一个未定义的索引,PHP将抛出一个E_NOTICE "Undefined index"。结果是CCD_ 2。

$arr = array();
$arr[] = "foo";
$arr[2] = "bar";
var_dump($arr[1]); // null + notice

您发布的代码片段不一定是错误的。如果前提条件是$post->ID$ids中,那么不检查array_search的输出是公平的。