Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-与“不一致”;“未定义的偏移量”;错误_Php_Arrays_Undefined_Offset - Fatal编程技术网

PHP-与“不一致”;“未定义的偏移量”;错误

PHP-与“不一致”;“未定义的偏移量”;错误,php,arrays,undefined,offset,Php,Arrays,Undefined,Offset,为什么PHP在这里抛出“注意:未定义的偏移”错误: <?php $MyVar = array(); echo $MyVar[0]; //Notice: Undefined offset: 0 ?> 但这里没有: <?php $MyVar = false; echo $MyVar[0]; //No error ?> 这最终是因为在第二个示例中,$MyVar[0]为null,这不是错误。您可能会引用$MyVar[0][1][2][3]并得到相同的结果 第一个示例不是n

为什么PHP在这里抛出“注意:未定义的偏移”错误:

<?php
$MyVar = array();
echo $MyVar[0]; //Notice: Undefined offset: 0
?>

但这里没有:

<?php
$MyVar = false;
echo $MyVar[0]; //No error
?>

这最终是因为在第二个示例中,
$MyVar[0]
为null,这不是错误。您可能会引用
$MyVar[0][1][2][3]
并得到相同的结果


第一个示例不是null,它是数组中缺少的索引,因此会发出警告。

当数组中没有值并且您试图引用未初始化的索引时,会提供未定义的偏移量

对于第二个代码,您已经为变量分配(初始化)了一个与变量[0]相同的值

如果在第一个示例中为前两个索引赋值,并参考第三个索引,则应得到未定义的偏移量错误

我不认为它是关于空或不空的,而是一种为索引赋值的情况。
如果采用C语言,数组相当于malloc(在一定程度上)。谢天谢地,PHP没有崩溃,只是抛出了一个未定义的索引[offset]错误

第一个示例实际上是echo NULL,但也抛出了一个错误。尝试第一个示例,您将看到“注意:未定义的偏移量”后面跟着“NULL”,这是有意义的,因为PHP专门查找未定义的索引。注意,这不是一个错误,而是一个通知。这是由于变量类型造成的。由于数组有偏移量,但布尔值没有,所以偏移量不是未定义的,而是
NULL
。相同的偏移通知适用于字符串
$MyVar='';echo$MyVar[0]
会导致
未初始化字符串偏移量:0
@fyrye me尝试引用布尔值的偏移量更应该是引发错误/警告/通知的原因参见:
使用[]或{}访问其他类型的变量(不包括实现适当接口的数组或对象)静默返回NULL。
这意味着PHP希望您在使用
[]
{}
访问变量之前验证变量类型,例如
if(is_array($MyVar))
@fyrye将其放入答案中,我将其标记为已接受