在PHP上添加数组上的字段

af_*_*inb 0 php

我正在尝试在数组中添加一个字段并返回它,但据说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)

Sty*_*hon 5

当处理$rowforeach循环,你不处理相同的变量,数组中,而是一个副本.如果您想进行持久更改,则需要使用参考.

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只需检查数据是否存在(通过检查数组键),如果是,请使用它.