【问题标题】:php - foreach through multidimentional array pass by reference on sub valuesphp - 通过多维数组的foreach通过子值的引用传递
【发布时间】:2018-06-18 20:19:24
【问题描述】:

假设我有一个这样的多维数组

$myArray = [
    0 = [
        fruit = 'apple',
        juice = 'orange',
        cars = [bmw = 'blue', audi = 'red', ford = 'yellow']
    ],
    1 = [
        fruit = 'strawberry',
        juice = 'grape',
        cars = [bmw = 'grey', mazda = 'blue', hummer = 'orange']
    ],
]

还有一些汽车的替换数组值

$replaceCarsArray = [ferrari = 'red', lamborghini = 'blue, masarati = 'pink']

我用 $key => &$values 遍历数组(通过引用传递值)

foreach ($myArray as $key => &$values) {
    foreach ($values as $key2 => &$value) {
        if ($key2 == 'cars'){
            $value = $replaceCarsArray;
        }
    }
}

有效并用 $replaceCarsArray 替换整个汽车值

但是如果我想定位汽车数组中的一个项目并更改颜色怎么办?所以这就是我尝试过的:

foreach ($myArray as $key => &$values) {
    foreach ($values as $key2 => &$value) {
        if ($key2 == 'cars' && $value['bmw'] != 'red'){
            $value['bmw'] = 'red';
        }
    }
}

但这似乎不起作用,并且 bmw 颜色没有更新为红色。我将如何更改这些数据?

请注意,这是示例数据,我为所有意图和目的非常快速地编写了它,我确实可以访问所有值,并且我的代码中没有任何可能出现在这里的语法错误。 em>

【问题讨论】:

标签: php multidimensional-array foreach reference


【解决方案1】:

试试下面的

   $myArray[$key][$key2]['bmw'] = 'blue';

【讨论】:

  • 是的,但它不会通过引用改变值
  • @user3896569 - 如果这有效并给您相同的结果,那么它是否通过引用又有什么关系呢?实际上最好不要在foreach-loops 中使用引用,因为它可能导致strange and unwanted behavior
【解决方案2】:

这对我有用

<?php

$myArray = [
    0 => [
        'fruit' => 'apple',
        'juice' => 'orange',
        'cars' => ['bmw' => 'blue', 'audi' => 'red', 'ford' => 'yellow']
    ],
    1 => [
        'fruit' => 'strawberry',
        'juice' => 'grape',
        'cars' => ['bmw' => 'grey', 'mazda' => 'blue', 'hummer' => 'orange']
    ]
];

echo "<pre>";
var_dump($myArray);
echo "</pre>";

foreach ($myArray as $key => &$values) {
    foreach ($values as $key2 => &$value) {
        if ($key2 == 'cars' && $value['bmw'] != 'red'){
            $value['bmw'] = 'red';
        }
    }
}

echo "<pre>";
var_dump($myArray);
echo "</pre>";

echo $myArray[0]['cars']['ford'];
echo $myArray[0]['cars']['bmw'];

测试于:http://phptester.net/

【讨论】:

  • 大声笑,你是对的,我进一步测试了更深层次的多维数组,这也有效。
猜你喜欢
  • 1970-01-01
  • 2015-07-04
  • 2011-05-24
  • 2015-07-08
  • 1970-01-01
  • 2013-06-01
  • 2020-06-29
  • 2020-12-16
  • 2013-04-21
相关资源
最近更新 更多