这是代码
$tasks = $project->getTasks();
foreach ($tasks as $key => $task) {
$task['position'] = $space->getPosition();
$task['symbol'] = $space->getSymbol();
}
逻辑上'position'和'symbol'应该添加在数组'task'中。它们实际上是添加的,但仅限于循环内部。它们在循环外消失。为什么?
答案 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();
}