PHP致命错误:未捕获错误:将值添加到数组时,操作数类型不受支持

时间:2018-07-04 14:21:59

标签: php arrays

尝试使用以下代码重建数组时出现错误:

  

PHP致命错误:未捕获错误:不支持的操作数类型

$id = '9242';
$supergroup = array('9242' => 1, '9243' => 0, '9244' => 2, '9245' => 0);
$supergroupnew = [];

array_walk_recursive($supergroup, function($item, $key) use(&$id) {
    if ($key == $id) {
        $supergroupnew += [ $key => $item ];
    } else {
        $supergroupnew += [ $key => "0" ];
    }
});

echo "<h1>Original Array:</h1>";
print_r($supergroup);   

echo "<h1>New Array:</h1>";
print_r($supergroupnew);

其他答案表明我正在尝试对数组进行一些算术运算,但是我在上面的代码中看不到。

2 个答案:

答案 0 :(得分:2)

这是因为未在函数内部定义$supergroupnew,并且实际错误将显示为:

  

注意:未定义的变量:supergroupnew

您需要进行以下小的更改:

array_walk_recursive($supergroup, function($item, $key) use($id, &$supergroupnew) {
// removed & from id
// added &$supergroupnew to use statement, you can access/modify this external variable

已经说过,在数组上使用+=将创建一个 union 而不是附加。 Quote

  

+运算符返回添加到左侧的右侧数组   数组对于两个数组中都存在的键,   将使用左侧数组,并且来自   右侧数组将被忽略。

除非有我不明白的地方,否则应改用[]

答案 1 :(得分:0)

编辑-显然,您可以使用+向数组中添加数组,因此可以忽略此答案。

您无法在PHP中使用+向数组添加值。像这样尝试:

$supergroupnew = [];

array_walk_recursive($supergroup, function($item, $key) use(&$id) {
    if ($key == $id) {
        $supergroupnew[] = [ $key => $item ];
    } else {
        $supergroupnew[] = [ $key => "0" ];
    }
});