PHP重构数据数组

PHP重构数据数组,php,chart.js,Php,Chart.js,我有一个数据数组,如下所示: array 0 => array (size=3) 'name' => string 'credit_card' 'revenue' => string '150' 'date' => string 'Apr 2020' 1 => array (size=3) 'name' => string 'cash' 'revenue' =&g

我有一个数据数组,如下所示:

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

在我的例子中,由于multiple line chartjs需要信用卡和现金的2个数字数组作为输入,因此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));

您想做什么?这是一个简单的迭代和构建新数组的问题。除了每个
和(如果是必要的)的
。你自己试过什么吗?虽然我们很乐意在您陷入困境时提供帮助,但我们仍然希望您为达成解决方案而努力。如果您尝试过一些东西,请分享您的努力,并解释它在何处以及如何未能达到您想要的效果。@SlavaRozhnev您好,我想将第一个php数组重组为第二个,thx!你被要求展示尝试,而不是你想要的。
<?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));