Как правильно заменить значение из подмассива?
Задача состоит в том, чтобы заменить значение из массива $array1['app_id'] = 5, если $array1['id'] равен с $array2['id']
$array1 = [
[
'id' => 1,
'app_id' => 0
],
[
'id' => 2,
'app_id' => 0
],
[
'id' => 3,
'app_id' => 0
],
[
'id' => 4,
'app_id' => 0
]
];
$array2 = [
[
'id' => 1
],
[
'id' => 2
]
];
foreach ($array1 as $arr1)
{
foreach ($array2 as $arr2)
{
if ($arr1['id'] == $arr2['id'])
{
$arr1['app_id'] = 5;
}
else
{
$arr1['app_id'] = 6;
}
}
$res[] = $arr1;
}
var_dump($res);
В данном примере результат ответа должен быть такой массив:
array(4) {
[0]=>
array(2) {
["id"]=>
int(1)
["app_id"]=>
int(5)
}
[1]=>
array(2) {
["id"]=>
int(2)
["app_id"]=>
int(5)
}
[2]=>
array(2) {
["id"]=>
int(3)
["app_id"]=>
int(6)
}
[3]=>
array(2) {
["id"]=>
int(4)
["app_id"]=>
int(6)
}
}
Но вместо нее возвращаются другие значения app_id :(
Ответы (1 шт):
Автор решения: Yakoffka
→ Ссылка
Если я правильно Вас понял, то Вам необходимо в цикле менять значения массива не $arr1, а $array1 (или передавать значение $arr1 по ссылке).
$a2 = array_column($array2, 'id');
var_dump($a2);
foreach ($array1 as $k => $a1) {
if (in_array($a1['id'], $a2, true)) {
$array1[$k]['app_id'] = 5;
} else {
$array1[$k]['app_id'] = 6;
}
}
var_dump($array1);
И вдобавок, для того, чтобы избавиться от вложенных foreach, можно получить массив значений из столбца 'id' второго массива, и проверять совпадения с помощью in_array().