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

时间:2015-10-06 14:37:38

标签: php arrays

这是代码

        $tasks = $project->getTasks();

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

逻辑上'position'和'symbol'应该添加在数组'task'中。它们实际上是添加的,但仅限于循环内部。它们在循环外消失。为什么?

3 个答案:

答案 0 :(得分:5)

PHP foreach循环操作by value(在数据的副本上),除非另有说明。有两种可能的解决方案

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();
        }

请参阅文档:http://php.net/manual/en/control-structures.foreach.php

答案 1 :(得分:1)

这是因为当您使用if (error['length']) {时,您将获得数组值的副本。您需要在foreach

中使用参考
foreach

注意foreach ($tasks as $key => &$task) { $task['position'] = $space->getPosition(); $task['symbol'] = $space->getSymbol(); } ,告诉PHP在循环中使用引用。

答案 2 :(得分:1)

不应该是这样的吗?

    $tasks = $project->getTasks();

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