PHP重构数据数组



我有一个数据数组如下:

array 
0 => 
array (size=3)
'name' => string 'credit_card' 
'revenue' => string '150' 
'date' => string 'Apr 2020' 
1 => 
array (size=3)
'name' => string 'cash' 
'revenue' => string '180' 
'date' => string 'Apr 2020'
2 => 
array (size=3)
'name' => string 'cash' 
'revenue' => string '80' 
'date' => string 'May 2020'
3 => 
array (size=3)
'name' => string 'credit_card'
'revenue' => string '60' 
'date' => string 'May 2020'
4 => 
array (size=3)
'name' => string 'cash' 
'revenue' => string '160' 
'date' => string 'Jun 2020' 
5 => 
array (size=3)
'name' => string 'credit_card' 
'revenue' => string '300' 
'date' => string 'Jul 2020' 

我想把这个数组重组成以下一个(在多个折线图js中使用):

array 
0 => 
array (size=3)
'cash' => string '180' 
'credit_card' => string '150' 
'date' => string 'Apr 2020' 
1 => 
array (size=3)
'credit_card' => string '60' 
'cash' => string '80' 
'date' => string 'May 2020'
2 => 
array (size=3)
'credit_card' => string '0' 
'cash' => string '160' 
'date' => string 'Jun 2020' 
3 => 
array (size=3)
'cash' => string '0' 
'credit_card' => string '300' 
'date' => string 'Jul 2020' 

在我的例子中,由于多个行chartjs需要2个数组作为credit_card和cash的输入,javascript的map()方法可以很容易地处理上述重构的数据。谁能分享一下关于如何重组数组的想法?谢谢!

试试下面的代码:

<?php
$data = array (
0 => array (
'name' => 'credit_card',
'revenue' => '150',
'date' => 'Apr 2020'
),
1 => array (
'name' => 'cash',
'revenue' => '180', 
'date' => 'Apr 2020'
),    
2 => array (
'name' => 'cash',
'revenue' => '80',
'date' => 'May 2020'
),
3 => array (
'name' => 'credit_card',
'revenue' => '60', 
'date' => 'May 2020'
),
4 => array (
'name' => 'cash', 
'revenue' => '160', 
'date' => 'Jun 2020' 
),
5 => array (
'name' => 'credit_card', 
'revenue' => '300', 
'date' => 'Jul 2020' 
)
);
$result = array_reduce(
$data,
function($res, $d) {
if (!isset($res[$d['date']])) $res[$d['date']] = [
'date' => $d['date'],
'cash' => 0,
'credit_card' => 0
];
$res[$d['date']][$d['name']] = $d['revenue'];
return $res;
},
[]
);
var_export(array_values($result));

共享代码

最新更新