例如:
$array = [];
echo $array['bar']; // PHP NOTICE - trying to access not existing key`
$array['bar'][] = 'foo'; // Nothing
我知道它会创建带有索引“bar”的数组,但 PHP 是如何在内部处理它的?
最佳答案
$array['bar'][] = 'foo';
不会返回通知或错误,因为没有错误。您正在创建一个新的数组索引和其中的另一个索引,并为其分配一个值。这就是声明的意思。没有错误返回。
如果您希望在未设置特定数组索引时有行为,您可以使用 array_key_exists ( http://php.net/manual/en/function.array-key-exists.php ):
if(array_key_exists('bar', $array)){
$array['bar'][] = 'foo';
} else {
// something else
}
如果这个问题是功能性的(即,您正在尝试完成特定的事情)。如果问题更概念化——为什么 PHP 不将变量赋值读取为错误:
PHP 能够在一行中对变量进行初始化和赋值,即$foo = 'bar'
。即使 $foo
之前没有定义,这也不会返回错误,因为 PHP 首先初始化变量。同样的方法也适用于数组索引。 $array['foo'][] = 'bar'
不会返回错误或通知,因为 PHP 正在初始化数组索引,就像初始化变量一样。
关于PHP:为什么当您向不存在索引的数组添加值时它不会引发通知?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41105441/