尝试使用以下代码重建数组时出现错误:
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);
其他答案表明我正在尝试对数组进行一些算术运算,但是我在上面的代码中看不到。
答案 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" ];
}
});