2013-04-08 49 views
0

我有阵列的一个这样的数组:在数组中的PHP阵列有条件的计数值

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

我想算“价值”,把它们加起来通过这样的“FROM日期”分组:

array('0' => 
      array(
      'fromDate' => 2007, 
      'sum' => 2) 
     '1' => 
      array(
      'fromDate' => 2010, 
      'sum' => 1)) 

任何帮助非常感谢!

+0

你能更具体一点你的要求是什么? – 2013-04-08 09:20:26

回答

2
$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); 
+0

+1。不是'array_reduce()'的粉丝,但是这个答案很好用:) – 2013-04-08 09:45:13

+0

谢谢@Mark Ba​​ker!现在我需要理解它为什么像一个魅力:)任何提示哪里可以最好地学习有关数组的一切? – 2013-04-08 13:52:59

+0

最好的开始地点(一如既往)是数组函数的PHP文档(http://www.php.net/manual/en/book.array.php);以及在回调中使用闭包的关闭页面(http://www.php.net/manual/en/functions.anonymous.php) – 2013-04-08 13:55:50

0

如果您想要计算具有“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; 
}