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
php
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