二维数组在循环传引用(&)时需注意

首先进行描述问题:

        一个平常的二维数组,如下面这个数组

        $arr = [
            "a" => [
               "1" => "5",    
               "5" => "25",    
               "4" => "8",    
               "3" => "13",    
            ],
            "b" => [
               "9" => "10",    
               "6" => "19",    
               "8" => "21",    
               "7" => "29",    
            ]

    ];

我现在需要将这个二维数组里面的一维关联数组进行按照键值排序,因为要改变数组内部值所以我使用了传引用

    foreach ($arr as $key => & $value) {
        ksort($value);

    }

完成排序操作之后我打印数组,此时数组是这样的

    

Array
(
    [a] => Array
        (
            [1] => 5
            [3] => 13
            [4] => 8
            [5] => 25
        )

    [b] => Array
        (
            [6] => 19
            [7] => 29
            [8] => 21
            [9] => 10
        )

)

它已经成功进行了排序,然后我饿们再次循环数组进行使用的时候,我们就需要注意问题了

    foreach ($arr as $key => $value) {
        echo "<pre>";

        var_dump($value);
    }

很简单的foreach遍历循环,然而在数组里面进行使用数组时,下标a的数组和下标b的数组的值都是下标a指向的数组

array(4) {
  [1]=>
  string(1) "5"
  [3]=>
  string(2) "13"
  [4]=>
  string(1) "8"
  [5]=>
  string(2) "25"
}
array(4) {
  [1]=>
  string(1) "5"
  [3]=>
  string(2) "13"
  [4]=>
  string(1) "8"
  [5]=>
  string(2) "25"
}

这时问题就来了,为什么会这样呢?其实就是我们在上面对数组进行了引用传递,然后在下面再次循环的时候引用传递还在对此数组产生作用,在循环第二次的时候就解析成了传引用,所以下标b出现的数组就是下标a的


想要解决这个问题也很简单,只需要再次循环时再加上一个&引用符,或者将上虞个引用符销毁就行了


上述问题属于个人碰见的坑所以将它分享出来,勿喷,谢谢


        

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值