2013-04-08 48 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; 
}