我有一个数据数组如下:
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));
共享代码