2

これは私の配列です:

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

これまでに試した方法では、日付でグループ化し、2 つの異なる配列を持つ 1 つのフィールドのみを合計します。

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 )

これは私が探しているものとは大きく異なり、まだ頭を悩ませています。可能な方法は何ですか??

4

2 に答える 2

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);
于 2013-01-04T02:34:43.837 に答える
0

これは、配列内のフィールドを合計する 1 つの方法です。

基本的に前の回答と同じ考え方ですが、一意の日付ごとに最初にアクセスしたときに「未定義のインデックス」が表示されるため、キーの存在を確認する必要があります。お役に立てれば。

        // 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;
            }
        }
于 2013-01-04T02:46:29.440 に答える