在foreach()循环头部解构数组时,能否为原输入数组添加新元素?
PHP foreach数组解构能否添加新元素?
自PHP7.1起,foreach()支持数组解构语法,用来拆解数组的行值并分配给独立变量。但你没法直接在foreach()的解构签名里声明新元素来修改原数组——解构的核心是提取现有键值,而非新增或修改原数组的结构。
举个例子,针对你给出的数组:
$array = [ ['foo' => 'a', 'bar' => 1], ['foo' => 'b', 'bar' => 2], ];
如果尝试在解构里写['foo' => $foo, 'bar' => $bar, 'new' => $new],程序只会尝试从每行里读取new键的值,找不到的话$new会被设为null(严格模式下会抛出错误),根本不会给原数组的行添加new键。
要给原数组每行新增new键,正确的做法有两种:
直接修改原数组(引用遍历)
通过引用遍历数组的每一行,直接给行添加新键值:
foreach ($array as &$row) { $row['new'] = '自定义新增值'; } unset($row); // 记得解除引用,避免后续操作污染数组 print_r($array);
生成新数组(不修改原数组)
如果不想改动原数组,可以结合解构提取值,再组装包含新键的新数组:
$newArray = []; foreach ($array as ['foo' => $foo, 'bar' => $bar]) { $newArray[] = [ 'foo' => $foo, 'bar' => $bar, 'new' => '自定义新增值' ]; } print_r($newArray);
内容的提问来源于stack exchange,提问作者mickmackusa
相关产品推荐
相关产品推荐

