PHP Формирование собственного массива из массива в массиве - PullRequest
0 голосов
/ 03 февраля 2020

У меня есть массив из трех месяцев, в котором есть Данные за три месяца , и он содержит Информация о сбережениях и скидках что-то вроде следующего:

graphData содержит DataArr .

[DataArr] => Array

    [0] => Array
            (
             [data] => Array
                 (
                   [0] => Array 
                      ( 
                        [Month] => 10 Jan 2019
                        [Cost] => 60.3
                        [Name] => Savings
                      )
                   [1] => Array 
                      ( 
                        [Month] => 10 Feb 2019
                        [Cost] => 45.3
                        [Name] => Savings
                      )
                   [2] => Array 
                      ( 
                        [Month] => 10 Mar 2019
                        [Cost] => 50.6
                        [Name] => Savings
                      )
                )
           )
    [1] => Array
            (
             [data] => Array
                 (
                   [0] => Array 
                      ( 
                        [Month] => 10 Jan 2019
                        [Cost] => 89.62
                        [Name] => Discount
                      )
                   [1] => Array 
                      ( 
                        [Month] => 10 Feb 2019
                        [Cost] => 20.2
                        [Name] => Discount
                      )
                   [2] => Array 
                      ( 
                        [Month] => 10 Mar 2019
                        [Cost] => 0.0
                        [Name] => Discount
                      )
                )
           )

REQUIRED ARRAY - для перехода в Morris. * Линия 1037 * Диаграмма

Теперь я хочу выполнить итерацию в этом массиве и хочу, чтобы формат массива был таким, как показано ниже

           [data] => Array
                 (
                   [0] => Array 
                      ( 
                        [Month] => 10 Jan 2019
                        [Savings] => 60.3
                        [Discount] => 89.62

                      )
                   [1] => Array 
                      ( 
                        [Month] => 10 Feb 2019
                        [Saving] => 45.3
                        [Discount] => 20.2
                      )
                   [2] => Array 
                      ( 
                        [Month] => 10 Mar 2019
                        [Saving] => 50.6
                        [Discount] => 0.0
                      )
                )

Не могли бы вы поделиться с вами, как я могу go о получении этого в необходимый массив с помощью PHP? Я пытался использовать array_pu sh и другие методы с JQuery методами Array, но все мои усилия не увенчались успехом, и я работаю над этим в течение последних 3 дней, любая помощь очень ценится.

Даже пытался с PHP foreach , но даже это не удалось, что-то упустили и у вас больше нет идей, как заставить это работать! Пожалуйста, дайте мне знать, если у кого-нибудь из вас есть много идей по этому поводу.

Спасибо

РЕДАКТИРОВАТЬ

** ОБРАЗЕЦ КОДА, КОТОРЫЙ Я ПРОБОВАЛ PHP **

for($k = 0; $k < sizeof($graphData['DataArr']); $k++ ) {
                for($l = 0; $l < sizeof($graphData['DataArr'][$k]); $l++ ) {
                    array_push($graphData['DataArr'], array(
                        'label' => $graphData['DataArr'][$k][$l]['label'], 
                        'percent' => $graphData['DataArr'][$k][$l]['percentage']
                            )
                    );
                }
            }

Здесь label => COST, DISCOUNT и Percentage - это значение, связанное с метками.

Ответы [ 2 ]

0 голосов
/ 03 февраля 2020

Исходя из того, что вы указали здесь, необходим код для создания нового массива:

<?php
$data = [
  [
    'data' => [
      [
        'Month' => '10 Jan 2019',
        'Cost' => 60.3,
        'Name' => 'Savings'
      ],
      [
        'Month' => '10 Feb 2019',
        'Cost' => 45.3,
        'Name' => 'Savings'
      ],
      [
        'Month' => '10 Mar 2019',
        'Cost' => 50.6,
        'Name' => 'Savings'
      ]
    ],
  ],
  [
    'data' => [
      [
        'Month' => '10 Jan 2019',
        'Cost' => 89.62,
        'Name' => 'Discount'
      ],
      [
        'Month' => '10 Feb 2019',
        'Cost' => 20.2,
        'Name' => 'Discount'
      ],
      [
        'Month' => '10 Mar 2019',
        'Cost' => 0.0,
        'Name' => 'Discount'
      ]
    ],
  ]
];

$new_arr = ['data' => []];
echo "<pre>";

foreach( $data[0]['data'] as $key => $value) {
  // $new_arr['data'][$k]['Month'] = 
  $new_arr['data'][$key]['Month'] =  $value['Month'];
  $new_arr['data'][$key]['Discount'] =  $value['Cost'];
  $new_arr['data'][$key]['Savings'] =  $data[1]['data'][$key]['Cost'];
}

print_r($new_arr);

Примечание : этот код предполагает, что массив $data будет иметь только 2 основных элемента больше элементов в этом массиве может вызвать другое поведение.

0 голосов
/ 03 февраля 2020
<?php

$graphData =
    array(
        'DataArr' => 
        array
            (
            array(
             'data' => array
                 (
                   array 
                      ( 
                        'Month' => '10 Jan 2019',
                        'Cost' => 60.3,
                        'Name' => 'Savings'
                      ),
                   array 
                      ( 
                        'Month' => '10 Feb 2019',
                        'Cost' => 45.3,
                        'Name' => 'Savings'
                      ),
                   array 
                      ( 
                        'Month' => '10 Mar 2019',
                        'Cost' => 50.6,
                        'Name' => 'Savings'
                      )
                )
            ),
            array
            (
             'data' => array
                 (
                   array 
                      ( 
                        'Month' => '10 Jan 2019',
                        'Cost' => 89.62,
                        'Name' => 'Discount'
                      ),
                   array 
                      ( 
                        'Month' => '10 Feb 2019',
                        'Cost' => 20.2,
                        'Name' => 'Discount'
                      ),
                   array 
                      ( 
                        'Month' => '10 Mar 2019',
                        'Cost' => 0.0,
                        'Name' => 'Discount'
                    )
                )
           )
    )
);


$result = [];

foreach($graphData['DataArr'] as $value){
    foreach($value['data'] as $details){
        if(!isset($result['data'][$details['Month']])) $result['data'][$details['Month']]  = ['Month' => $details['Month']];
        $result['data'][$details['Month']][$details['Name']] = $details['Cost'];
    }
}

$result['data'] = array_values($result['data']); // to eliminate keys
print_r($result);

Демонстрация: https://3v4l.org/QMVuR

  • Сначала мы создаем массив $result с ключом data.
  • Мы l oop над $graphData и сохраняем значения Month, Savings и Discount под индексированным значением ключа Month.
  • В конце Мы делаем array_values() для удаления ключей.
...