我正在尝试在数组中添加一个字段并返回它,但据说var_dump,没有对数组进行任何更改.执行if块中的指令,数据似乎正确.
function addLength($toAdd, $added){
$result = $toAdd;
foreach ($result as $row) {
foreach ($added as $key => $value) {
if($key == $row['id'] ){
$row['length'] = $value;
}
}
}
var_dump($result);
return $result;
}
Run Code Online (Sandbox Code Playgroud)
当处理$row的foreach循环,你不处理相同的变量,数组中,而是一个副本.如果您想进行持久更改,则需要使用参考.
function addLength($toAdd, $added){
$result = $toAdd;
foreach ($result as & $row) {
foreach ($added as $key => $value) {
if($key == $row['id'] ){
$row['length'] = $value;
}
}
}
var_dump($result);
return $result;
}
Run Code Online (Sandbox Code Playgroud)
请务必注意,基准仍然会存在后的foreach循环完成.它将包含对$result数组最后一个元素的引用.要停止此操作,您需要手动unset引用.
function addLength($toAdd, $added){
$result = $toAdd;
foreach ($result as & $row) {
foreach ($added as $key => $value) {
if($key == $row['id'] ){
$row['length'] = $value;
}
}
}
var_dump($row); // Outputs the last element of your $result array
unset($row);
var_dump($row); // Now undefined.
var_dump($result);
return $result;
}
Run Code Online (Sandbox Code Playgroud)
就像一个FYI,你可以优化你的代码并摆脱第二个foreach循环,这是没有必要的.这会做同样的事情:
function addLength($toAdd, $added){
$result = $toAdd;
foreach ($result as & $row) {
if ( array_key_exists($row['id'], $added) ) {
$row['length'] = $added[$row['id']];
}
}
var_dump($result);
return $result;
}
Run Code Online (Sandbox Code Playgroud)
现在,而不是循环遍历$added您的每个项目,$toAdd只需检查数据是否存在(通过检查数组键),如果是,请使用它.
| 归档时间: |
|
| 查看次数: |
1884 次 |
| 最近记录: |