'two' => 12,
'three' => 13
];
$arr2 = [
'one' => 21,
'two' => 22,
'three' => 23
];
foreach ([$arr1, $arr2] as $arr) {
$i = 1;
foreach ($arr as $key => $val) {
$arr[$key] = '3' . $i;
$i++;
}
}
var_dump($arr1);
var_dump($arr2);
В данном случае массивы $arr1 и $arr2 НЕ МЕНЯЮТСЯ. А как мне изменить этот код, чтобы они менялись?
Я пробовал написать так:
foreach ([$arr1, $arr2] as &$arr) {
То есть добавить амперсанд перед $arr. Но это не помогло.
А теперь добавь амперсанд перед $val
Так? Нет, не помогло. foreach ([$arr1, $arr2] as $arr) { $i = 1; foreach ($arr as $key => &$val) { $val = '3' . $i; $i++; } }
и для $arr и для $val
foreach ([$arr1, $arr2] as &$arr) { $i = 1; foreach ($arr as $key => &$val) { $val = '3' . $i; $i++; } } Не работает
foreach ([&$arr1, &$arr2] as &$arr) { $i = 1; foreach ($arr as $key => &$val) { $arr[$key] = '3' . $i; $i++; } }
ты своим [$arr1, $arr2] по сути новый массив создаёшь внутри foreach, на который ссылаешься вместо $arr1 и $arr2, поэтому они не меняются
$arr3 = [$arr1, $arr2]; foreach ($arr3 as &$arr) { ... } var_dump($arr3);
Это подошло, спасибо 👍😊
что делает &?
Передаёт объект по ссылке
понял, спасибо, почитаю
Обсуждают сегодня