2013-01-04 49 views
2

這是我的數組:PHP陣列組和總結兩個字段

Array ( 
[0] => Array ([date] => 28-10-2012 [total] => 100 [earn] => 10) 
[1] => Array ([date] => 28-12-2012 [total] => 100 [earn] => 10) 
[2] => Array ([date] => 28-12-2012 [total] => 90 [earn] => 9) 
[3] => Array ([date] => 28-12-2012 [total] => 315.35 [earn] => 31.535) 
[4] => Array ([date] => 02-01-2013 [total] => 1500 [earn] => 150) 
[5] => Array ([date] => 02-01-2013 [total] => 1000 [earn] => 100) 
) 

慾望輸出:

Array ( 
[0] => Array ([date] => 28-10-2012 [total] => 100 [earn] => 10) 
[1] => Array ([date] => 28-12-2012 [total] => 505.35 [earn] => 505.535) 
[2] => Array ([date] => 02-01-2013 [total] => 2500 [earn] => 250) 
) 

的方法我試過到目前爲止按日期管理分組和總結只有一個字段有兩個不同的數組。

Array ([28-10-2012] => 100 [28-12-2012] => 505.535 [02-01-2013] => 2500) 

Array ([28-10-2012] => 10 [28-12-2012] => 50.535 [02-01-2013] => 250) 

這與我所尋找的非常不同,仍然開裂。 什麼是可能的方法?

回答

2

我不認爲這是一個內建函數,你必須自己編寫算法。類似這樣的:

$result = array(); 
foreach ($array as $row) 
{ 
    $result[$row['date']]['date'] = $row['date']; 
    $result[$row['date']]['total'] += $row['total']; 
    $result[$row['date']]['earn'] += $row['earn']; 
} 
$result = array_values($result); 
+0

工作就像魅力。謝謝@AndreKR – Eric

0

這是一種總結數組中字段的方法。

它與上一個答案基本相同,但是您應該檢查密鑰的存在性,因爲您在每次唯一日期的第一次訪問時會得到一個「未定義索引」。希望這可以幫助。

 // your example input array 
     $arr = array(
      array('date'=>'28-10-2012', 'total'=>100, 'earn'=>10), 
      array('date'=>'28-10-2012', 'total'=>100, 'earn'=>12), 
      array('date'=>'28-11-2012', 'total'=>120, 'earn'=>12), 

     ); 

     $newData = array(); 
     foreach($arr as $row) { 
      if(array_key_exists($row['date'], $newData)) { 
       $newData[$row['date']]['total'] += $row['total']; 
       $newData[$row['date']]['earn'] += $row['earn'];   
      } else { 
       $newData[$row['date']] = $row; 
      } 
     } 
+0

一些解釋性文字不會不合適。 – tacaswell