素材牛VIP会员
php 数组处理的疑惑
 Sl***rk  分类:PHP代码  人气:918  回帖:4  发布于6年前 收藏
foreach ($good_info as $key => &$val) {
    $val['g_num'] = $vv[$key];
    $val['ware_Beizu'] = $bb[$key];
}
[7]=>
  array(15) {
    ["id"]=>
    string(4) "1170"
    ["g_name"]=>
    string(12) "日本豆腐"
    ["g_images"]=>
    string(72) "http://xlddc.zkd.com/Public/Uploads/goods/2017-06-29/595450d5db86a.jpg"
    ["g_price"]=>
    string(1) "0"
    ["g_attr"]=>
    string(7) "90g/根"
    ["g_cd"]=>
    string(6) "中国"
    ["g_desc"]=>
    string(0) ""
    ["g_count"]=>
    string(3) "998"
    ["g_sum"]=>
    string(1) "1"
    ["g_cat"]=>
    string(3) "878"
    ["is_on_sale"]=>
    string(1) "1"
    ["g_sn"]=>
    string(5) "13033"
    ["g_cont"]=>
    NULL
    ["g_num"]=>
    string(1) "1"
    ["ware_Beizu"]=>
    string(12) "日本豆腐"
  }
  [8]=>
  &array(15) {
    ["id"]=>
    string(4) "1175"
    ["g_name"]=>
    string(9) "咸鸭蛋"
    ["g_images"]=>
    string(72) "http://xlddc.zkd.com/Public/Uploads/goods/2017-06-29/595456e6e0c73.jpg"
    ["g_price"]=>
    string(1) "0"
    ["g_attr"]=>
    string(3) "只"
    ["g_cd"]=>
    string(6) "中国"
    ["g_desc"]=>
    string(0) ""
    ["g_count"]=>
    string(3) "997"
    ["g_sum"]=>
    string(1) "2"
    ["g_cat"]=>
    string(3) "879"
    ["is_on_sale"]=>
    string(1) "1"
    ["g_sn"]=>
    string(10) "0401002002"
    ["g_cont"]=>
    NULL
    ["g_num"]=>
    string(1) "1"
    ["ware_Beizu"]=>
    string(9) "咸鸭蛋"
  }
}

第八条 哪里怎么多了个& 怎么去掉&尼?

 标签:php

讨论这个帖子(4)垃圾回帖将一律封号处理……

Lv3 码奴
随***吧 JS工程师 6年前#1

foreach ($good_info as $key => &$val) {
这个 & 是什么意思呢

Lv5 码农
la***gt JS工程师 6年前#2

谢邀!

  • 方法一:

foreach ($good_info as $key => $val) {
    $good_info[$key]['g_num']      = $vv[$key];
    $good_info[$key]['ware_Beizu'] = $bb[$key];
}
  • 方法二:

foreach ($good_info as $key => &$val) {
    $val['g_num'] = $vv[$key];
    $val['ware_Beizu'] = $bb[$key];

}

unset($val);
  • 原因:

你的第八个数组前面那个&代表$good_info[8]和$val指向了内存中同一个地址,这个时候改变$val的值$good_info[8]也会改变。所以取消引用就好了。

Lv6 码匠
生***炸 UI设计师 6年前#3

这个问题就是两次foreach 引用会导致的经典bug

http://zccst.iteye.com/blog/1753902

Lv4 码徒
sy***88 软件测试工程师 6年前#4

解决方案是永远不要用&

或者老老实实按照官网的指示,用unset解除引用

<?php
$arr = array(1, 2, 3, 4);
foreach ($arr as &$value) {
    $value = $value * 2;
}
// $arr is now array(2, 4, 6, 8)
unset($value); // break the reference with the last element
?>

参考(之前提问): https://segmentfault.com/q/10...
参考2(用&导致的“异常”行为): https://3v4l.org/hlJda

 文明上网,理性发言!   😉 阿里云幸运券,戳我领取