Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我无法在PHP数组中添加键值对_Php_Arrays - Fatal编程技术网

我无法在PHP数组中添加键值对

我无法在PHP数组中添加键值对,php,arrays,Php,Arrays,这是密码 $tasks = $project->getTasks(); foreach ($tasks as $key => $task) { $task['position'] = $space->getPosition(); $task['symbol'] = $space->getSymbol(); } 逻辑上,“位置”和“符号”应添加到数组“任务”中。它们实际上是被

这是密码

        $tasks = $project->getTasks();

        foreach ($tasks as $key => $task) {
            $task['position'] = $space->getPosition();
            $task['symbol'] = $space->getSymbol();
        }

逻辑上,“位置”和“符号”应添加到数组“任务”中。它们实际上是被添加的,但只是在循环内部。它们消失在环路之外。为什么?

这是因为当您使用
foreach
时,您将获得数组值的副本。您需要在
foreach
中使用引用

foreach ($tasks as $key => &$task) {
    $task['position'] = $space->getPosition();
    $task['symbol'] = $space->getSymbol();
}

请注意
&
,它告诉PHP在循环内使用引用。

除非另有规定,否则PHP foreach循环按值
操作(在数据副本上)。有两种可能的解决办法

foreach ($tasks as $key => $task) {
  $tasks[$key]['position'] = $space->getPosition();
  $tasks[$key]['symbol'] = $space->getSymbol(); 
}
或者

foreach ($tasks as &$task) {
            $task['position'] = $space->getPosition();
            $task['symbol'] = $space->getSymbol();
        }

请参阅文档:

不应该是这样的吗

    $tasks = $project->getTasks();

    foreach ($tasks as $key => $task) {
        $tasks[$key]['position'] = $space->getPosition();
        $tasks[$key]['symbol'] = $space->getSymbol();
    }

那太完美了。谢谢,两种方法都可以。谢谢。