PHP foreach 加&遍历的同时改变原数组即修改数据或者增加数据

注意:如果我要改变数组某一个值 直接遍历的话原数组是不会变的
$data=array(1,2,3,4);
foreach($data as $k=>$v){
       if($v==2)  $v=666;//我们想把值等于2的改为666 这样的话在内部改变了$v但是$data还是没改变

}

下面提供两种方法

1.使用键名的方式

foreach($data as $k => $v){
      if($v==2)  $data[$k]=666;
}

2.我们可以在遍历的值前面加个&符号这样就可以改变原数组了
foreach($data as &$v){
      if($v==2)  $v=666;//因为$v前面加了'&'所以原数组就直接改变了
}

场景:每个产品可能有多个链接,统计每个产品各个链接下的注册数reg_amount,
同时要返回给前端产品名称,id;url名称,id;注册数
$ret = [
  [
    'product_id' => 1,
    'url_id' => 1,
    'reg_amount' => 0
  ],
  [
    'product_id' => 1,
    'url_id' => 2,
    'reg_amount' => 0
  ],
  [
    'product_id' => 2,
    'url_id' => 3,
    'reg_amount' => 0
  ]
];

$retTemp = [
  [
    'product_id' => 1,
    'product_name' => '钱包',
    'url_id' => 1,
    'url_name' => '钱包链接1'
  ],
  [
    'product_id' => 1,
    'product_name' => '钱包',
    'url_id' => 2,
    'url_name' => '钱包链接2'
  ],
  [
    'product_id' => 2,
    'product_name' => '鞋子',
    'url_id' => 3,
    'url_name' => '鞋子链接1'
  ]
];
方式一
foreach ($ret as $key => $value) {
    foreach ($tempRet as $k => $v) {
        if($value['product_id'] == $v['product_id'] && $value['url_id'] == $v['url_id']) {
          $ret[$key]['product_name'] = $v['product_name'];
          $ret[$key]['url_name'] = $v['url_name'];

        }

    }
}

方式二

foreach ($ret as $key => &$value) {
    foreach ($tempRet as $k => $v) {
        if($value['product_id'] == $v['product_id'] && $value['url_id'] == $v['url_id']) {
          $value['product_name'] = $v['product_name'];
          $value['url_name'] = $v['url_name'];

        }

    }
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值