Php 在数组的数组中有条件地计算值

Php 在数组的数组中有条件地计算值,php,arrays,Php,Arrays,我有这样一个数组: array('0'=> array( 'fromDate' =>2007, 'toDate' => 2008, 'value' => 7) '1'=> array( 'fromDate' =>2010, 'toDate' => , 'va

我有这样一个数组:

array('0'=> 
            array(
           'fromDate' =>2007,
           'toDate' => 2008,
           'value' => 7)
      '1'=>
            array(
            'fromDate' =>2010,
            'toDate' => ,
            'value' => 3)
      '2'=>
            array(
            'fromDate' => 2007,
            'toDate' => ,  
            'value' => 4))
array('0' =>
             array(
             'fromDate' => 2007,
             'sum' => 2)
      '1' =>
            array(
            'fromDate' => 2010,
            'sum' => 1))
我想计算“值”,将它们按“fromDate”分组相加,如下所示:

array('0'=> 
            array(
           'fromDate' =>2007,
           'toDate' => 2008,
           'value' => 7)
      '1'=>
            array(
            'fromDate' =>2010,
            'toDate' => ,
            'value' => 3)
      '2'=>
            array(
            'fromDate' => 2007,
            'toDate' => ,  
            'value' => 4))
array('0' =>
             array(
             'fromDate' => 2007,
             'sum' => 2)
      '1' =>
            array(
            'fromDate' => 2010,
            'sum' => 1))

非常感谢您的帮助

如果您想计算有多少个带有“fromDate”的数组,例如2007,则:

$myData = array('0'=>
            array(
           'fromDate' =>2007,
           'toDate' => 2008,
           'value' => 7),
      '1'=>
            array(
            'fromDate' =>2010,
            'toDate' => NULL,
            'value' => 3),
      '2'=>
            array(
            'fromDate' => 2007,
            'toDate' => NULL,
            'value' => 4)
);

$counts = array_reduce(
    $myData,
    function ($counter, $entry) {
        if (!isset($counter[$entry['fromDate']])) {
            $counter[$entry['fromDate']] = array(
                'fromDate' => $entry['fromDate'],
                'sum' => 1
            );
        } else {
            $counter[$entry['fromDate']]['sum']++;
        }
        return $counter;
    },
    array()
);

var_dump($counts);
function countByFromDate($array) {
  $result = array();
  foreach($array as $item) {
    $fromDate = $item['fromDate'];
    if (!isset($result[$fromDate])) {
      $result[$fromDate] = array('fromDate' => $fromDate, 'sum' => 0);  
    }
    $result[$fromDate]['sum']++;
  }

  return $result; 
}

如果您想计算有多少个带有“fromDate”(例如2007)的数组,请执行以下操作:

function countByFromDate($array) {
  $result = array();
  foreach($array as $item) {
    $fromDate = $item['fromDate'];
    if (!isset($result[$fromDate])) {
      $result[$fromDate] = array('fromDate' => $fromDate, 'sum' => 0);  
    }
    $result[$fromDate]['sum']++;
  }

  return $result; 
}

你能更具体一点你的要求是什么吗?你能更具体一点你的要求是什么吗?+1。不喜欢数组_reduce(),但这个答案很好地利用了它:)谢谢@Mark Baker!现在我需要理解为什么它会像一个符咒一样工作:)关于在哪里最好地学习关于数组的一切的任何技巧吗?最好的开始(一如既往)是数组函数的php文档();以及闭包()的相关页面,用于在回调+1中使用闭包。不喜欢数组_reduce(),但这个答案很好地利用了它:)谢谢@Mark Baker!现在我需要理解为什么它会像一个符咒一样工作:)关于在哪里最好地学习关于数组的一切的任何技巧吗?最好的开始(一如既往)是数组函数的php文档();以及闭包()的相关页面,用于在回调中使用闭包