doutang1992 2018-06-29 13:43
浏览 19
已采纳

尝试更新阵列时出错

I have a two questions with a symfony's project.

My first one : I am trying to modify some data in an array. I have this code

var_dump($results); // FIRST ONE
foreach ($results as $result) {
    foreach ($result as $res) {
        foreach ($dates as $date) {
            if(!array_key_exists($date,$res)) {
                $res = array_merge($res,[$date => '0']);
            }
        }
        var_dump($res); // THIS ONE IS MODIFIED
    }
}
var_dump($results); // LAST ONE... SAME AS THE FIRST ONE

I don't understand why my array ' $results ' is no updated... am i missing something ?

And my second question : is there any way to simplify this code ? I don't like the 3 foreach.

Thanks you guys :)

  • 写回答

2条回答 默认 最新

  • dongxingji3882 2018-06-29 13:53
    关注

    Unless you're passing an object in PHP, PHP does not pass values by reference. $res is a copy of the value, not a link to the original value. If you know what you're doing, you can pass by reference. When passing by reference, altering $res would alter the original data. You pass by reference by prefixing a & to the variable or argument.

    Since this is a nested foreach, you'll also have to pass $result by reference to avoid that being a copy of the item of $results.

    foreach ($results as &$result) {
        foreach ($result as &$res) {
            foreach ($dates as $date) {
                if(!array_key_exists($date,$res)) {
                    $res = array_merge($res,[$date => '0']);
                }
            }
        }
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 对接wps接口实现获取元数据
  • ¥20 给自己本科IT专业毕业的妹m找个实习工作
  • ¥15 用友U8:向一个无法连接的网络尝试了一个套接字操作,如何解决?
  • ¥30 我的代码按理说完成了模型的搭建、训练、验证测试等工作(标签-网络|关键词-变化检测)
  • ¥50 mac mini外接显示器 画质字体模糊
  • ¥15 TLS1.2协议通信解密
  • ¥40 图书信息管理系统程序编写
  • ¥20 Qcustomplot缩小曲线形状问题
  • ¥15 企业资源规划ERP沙盘模拟
  • ¥15 树莓派控制机械臂传输命令报错,显示摄像头不存在