php-foreach通过多维数组在子值上按引用传递

php-foreach通过多维数组在子值上按引用传递,php,multidimensional-array,foreach,reference,Php,Multidimensional Array,Foreach,Reference,假设我有一个多维数组 $myArray = [ 0 = [ fruit = 'apple', juice = 'orange', cars = [bmw = 'blue', audi = 'red', ford = 'yellow'] ], 1 = [ fruit = 'strawberry', juice = 'grape', cars = [bmw = 'grey', ma

假设我有一个多维数组

$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=>&$value(通过引用传递的值)遍历数组

这样可以使用$replaceCarsArray替换整个cars值

但是,如果我想针对cars数组中的一个项目并更改颜色,该怎么办?这就是我所尝试的:

foreach ($myArray as $key => &$values) {
    foreach ($values as $key2 => &$value) {
        if ($key2 == 'cars' && $value['bmw'] != 'red'){
            $value['bmw'] = 'red';
        }
    }
}
然而,这似乎不起作用,宝马的颜色也没有更新为红色。我如何才能更改这些数据

请注意,这是示例数据,我写得非常快,出于所有目的和目的,我确实可以访问所有值,并且我的代码中没有任何可能出现的语法错误。

请尝试以下方法

   $myArray[$key][$key2]['bmw'] = 'blue';
这对我很有用

<?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'];

可以,但不会通过以下方式更改值reference@user3896569-如果这是有效的,并且给了您相同的结果,那么如果是通过引用还是不引用,又有什么关系呢?实际上,最好不要在
foreach
-循环中使用引用,因为它可能导致错误。您的代码可以工作,不要欺骗我们-哈哈,您是对的,我进一步测试了更深层的多维数组,这也行得通。
<?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'];