php - 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 是与标签关联的值。
解决方案
<?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);
- 我们首先创建一个包含键的
$result
数组。data
- 我们循环
$graphData
并存储 的值Month
和Savings
的Discount
索引键值Month
。 - 最后,我们确实
array_values()
删除了密钥。
推荐阅读
- flutter - 在 Flutter 中显示用户友好的错误页面而不是异常
- java - Firebase 查询似乎在 andorid 中不起作用
- java - 在 selenium 中使用 Microsoft Outlook 发送电子邮件的 Java 程序抛出“javax.mail.MessagingException:”
- c# - 寻找一种方法来保存用户进度 c# 表单
- java - 当我们在集合中使用 for-each 结构进行迭代时,元素的顺序是什么?
- mysql - 运行“sudo find / -iname 'mysql*' -exec rm -rf {} \;”后是否可以恢复 Ubuntu 16.04 并安装 mysql?
- flask - 如何在 Google Cloud Functions 的 python 环境中检查 HTTP 基本身份验证
- entity-framework - Entity Framework Plus - foreach 循环中的 FutureValue()
- cakephp - 在 CAKEPHP 检查所有视图的内容,如果不正常则发送邮件
- server - CPanel - 直接打开内部链接设置