PHP:为什么当您向不存在索引的数组添加值时它不会引发通知?

标签 php arrays

例如:

$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/

相关文章:

arrays - Bash比较数组值以找到最大值

arrays - 查找排序数组中结束值和起始值之差至多为 k 的最长连续子数组的长度

iphone - 具有 int 值的属性的值类型 Not Acceptable

javascript - 一次只显示一个数组项 (Javascript)

PHP 正则表达式匹配多行字符串中的多次出现

php - 方法不返回任何内容

php - 如何在 rails 中创建图像? (来自 php 中的 imagecreate())

javascript - 如何在JavaScript中创建语句条件Session?

PhP 如何将 session 数组发送到 MySQL 表?

php - 使用 PHP 将数组值分配给增量变量以插入到 mysql 表中