首页 > 解决方案 > PHP从数组内的数组形成自定义数组

问题描述

我有一个三个月的数组,其中包含三个月的数据,它包含如下所示的储蓄和折扣信息

graphData持有DataArr

[DataArr] => 数组

    [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.js 折线图

现在我想迭代到这个数组并希望以如下方式获得数组格式

           [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
                      )
                )

你能分享我如何使用 PHP 将它放入所需的数组中吗?我也尝试了 array_push 和其他使用 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 是与标签关联的值。

标签: phpmorris.js

解决方案


<?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
  • 我们循环$graphData并存储 的值MonthSavingsDiscount索引键值Month
  • 最后,我们确实array_values()删除了密钥。

推荐阅读