php 覆盖相同数组,php-foreach循环后覆盖数组

我试图将包含来自sql结果集中的元素的对象推入数组.我的代码是这样的:

$data = array();

$sql = "SELECT id,type,name,username FROM users";

foreach ($conn->query($sql) as $row) {

$this->set_id($row['id']);

$this->set_type($row['type']);

$this->set_username($row['username']);

$this->set_password($row['password']);

$data[] = $this;

}

我的结果集是正确的,但是在foreach循环结束后,我的数组单元格被最后一个记录集的值覆盖.例如,当我print_r我的$data数组ouside时,如果我有这些结果{1,’type1′,’user’,’pass’},{2,’type2′,’foo’,’bar’}循环,我只得到第二个结果集重复两次.我究竟做错了什么?

解决方法:

在实例方法中,$this始终引用当前类的实例;在每次循环迭代时,您都要修改实例本身,然后将其添加到$data中;但是在分配时,不会进行复制,而是添加了对同一实例的引用.

最后,您在每个索引处都有一个具有相同对象的数组.

您将需要在每次循环迭代时为您所在类创建一个新实例:

foreach ($conn->query($sql) as $row) {

$obj = new self; // create new instance of ourselves

$obj->set_id($row['id']);

$obj->set_type($row['type']);

$obj->set_username($row['username']);

$obj->set_password($row['password']);

$data[] = $obj;

}

这是一个个人建议,但是我可以将此代码移到静态方法中,也可以将其移到单独的类中.

标签:overwrite,foreach,arrays,php

来源: https://codeday.me/bug/20191031/1973911.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值