Показать данные массива по месяцам - PullRequest
0 голосов
/ 26 сентября 2018

У меня есть массив, как показано ниже. Данные массива могут варьироваться от января до декабря для каждого продукта

Array
(
[0] => Array
    (
        [0] => Array
            (
                [SalesYear] => 2018
                [SalesMonth] => July
                [TotalSales] => 1
                [name] => Budweiser Beer 330ml (Pack of 3)
                [code] => BB330
            )

        [1] => Array
            (
                [SalesYear] => 2018
                [SalesMonth] => August
                [TotalSales] => 2
                [name] => Budweiser Beer 330ml (Pack of 3)
                [code] => BB330
            )

        [2] => Array
            (
                [SalesYear] => 2018
                [SalesMonth] => September
                [TotalSales] => 16
                [name] => Budweiser Beer 330ml (Pack of 3)
                [code] => BB330
            )

    )

[1] => Array
    (
        [0] => Array
            (
                [SalesYear] => 2018
                [SalesMonth] => August
                [TotalSales] => 11
                [name] => Chicharon 100g
                [code] => CC100
            )

        [1] => Array
            (
                [SalesYear] => 2018
                [SalesMonth] => September
                [TotalSales] => 3
                [name] => Chicharon 100g
                [code] => CC100
            )

    )

Теперь я хочу показать каждый месяц продажи продукта:

https://prnt.sc/kysxur

Пока что это то, что я пытался

enter image description here

Спасибо

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018
$result = [];
$months = [];
foreach($array as $items) {
   foreach($items as $item) {
       $months[$item['SalesMonth']] = $item['SalesMonth'];
       $result[$item['name']][$item['SalesMonth']] = ($result[$item['name']][$item['SalesMonth']]??0) + $item['TotalSales'];
    }
}
?>
<table>
<tr>
<th>Product</th>
   <?php foreach($months as $month):?>
      <th><?=$month;?></th>
   <?php endforeach;?>
</tr>
<?php foreach($result as $name => $items):?>
    <tr>
       <td><?=$name;?></td>
       <?php foreach($months as $month):?>
           <td><?=$items[$month]??0;?></td>
       <?php endforeach;?>
    </tr>
<?php endforeach;?>
</table>
0 голосов
/ 26 сентября 2018

вам понадобится функция uksort, но вам нужно будет кое-что упорядочить там:

uksort($array, function($a1, $a2) {
        $time1 = strtotime($a1);
        $time2 = strtotime($a2);

        return $time1 - $time2;
    });

print_r($ar);

и месяцы должны быть в строке

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...