array merge внутри foreach
я пытаюсь объединить два arrays
, у меня есть следующее:
в переменной $ventas
у меня есть следующий объект:
{
"Mesa": [
{
"producto": "Mesa",
"mes": "6",
"total": "1"
},
{
"producto_id": "0",
"mes": "7",
"total": "198"
}
],
"Silla": [
{
"producto_id": "Silla",
"mes": "7",
"total": "1"
}
]
}
у меня также есть еще один array
месяцев:
$months = [
'1' => 0,
'2' => 0,
'3' => 0,
'4' => 0,
'5' => 0,
'6' => 0,
'7' => 0,
'8' => 0,
'9' => 0,
'10' => 0,
'11' => 0,
'12' => 0
];
я выполнял операции с foreach
foreach ($ventas as $indeOne => $venta) {
foreach ($venta as $indexTwo => $value) {
$array_1[$indeOne] = $value;
foreach ($months as $indexTree => $month) {
if($indexTree == $value->mes){
$new[$indeOne][$indexTree] = $value->total;
}
}
}
}
и это возвращает меня к следующему:
{
"Mesa": {
"6": "1",
"7": "198"
},
"Silla": {
"7": "1"
}
}
что говорит мне, что в месяце 6 у вас есть 1 продажа, а в месяце 198 так далее.
но результат, который я пытаюсь получить, - это то, что далее:
{
"Mesa": [
{
"1": 0,
"2": 0,
"3": 0,
"4": 0,
"5": 0,
"6": 1,
"7": 198,
"8": 0,
"9": 0,
"10": 0,
"11": 0,
"12": 0,
},
],
"Silla": [
{
"1": 0,
"2": 0,
"3": 0,
"4": 0,
"5": 0,
"6": 1,
"7": 1,
"8": 0,
"9": 0,
"10": 0,
"11": 0,
"12": 0,
},
]
}}
я попытался вставить array_merge()
внутри foreach, но он связывает меня неправильно.
6
Author: Carlos Mendez, 2018-08-10
2 answers
Вам просто нужно изменить порядок ваших foreach
и добавить elseif
. Что-то вроде этого:
foreach ($ventas as $indeOne => $venta) {
foreach ($months as $indexTree => $month) {
foreach ($venta as $indexTwo => $value) {
if($indexTree == $value->mes){
$new[$indeOne][$indexTree] = $value->total;
} elseif(!isset($new[$indeOne][$indexTree])) {
$new[$indeOne][$indexTree] = 0;
}
}
}
}
1
Author: alanfcm, 2018-08-10 21:08:46
Я думаю, что лучше всего втиснуть массив целых месяцев и изменить только по индексу:
foreach ($ventas as $indeOne => $venta) {
//Guardar llave con los meses
$array_1[$indeOne][0] = $months;
foreach ($venta as $indexTwo => $value) {
//Llenar informacion de meses
$array_1[$indeOne][0][$value['mes']] = $value['total'];
}
}
1
Author: Christian González, 2018-08-10 21:26:40