1

我有一个数组:

Array
(
    [0] => Array
        (
            [id] => 81
            [placed] => 2013-09-19 16:32:53
            [sub_total] => 786
        )

    [1] => Array
        (
            [id] => 80
            [placed] => 2013-09-19 16:32:06
            [sub_total] => 780
        )

    [2] => Array
        (
            [id] => 79
            [placed] => 2013-09-18 17:06:48
            [sub_total] => 786
        )

    [3] => Array
        (
            [id] => 78            
            [placed] => 2013-09-18 17:05:02
            [sub_total] => 756
        )

    [4] => Array
        (
            [id] => 77          
            [placed] => 2013-09-17 17:02:53
            [sub_total] => 786
        )

    [5] => Array
        (
            [id] => 76
            [placed] => 2013-09-16 17:02:53
            [sub_total] => 756
        )
)

是否可以按日期对这些数据进行分组并汇总小计以获取输出数组:

 Array
    (
        [0] => Array
            (
                [placed] => 2013-09-19
                [sub_total] => 786 + 780
            )

        [2] => Array
            (
                [placed] => 2013-09-18
                [sub_total] => 786 + 756
            )

        [3] => Array
            (
                [placed] => 2013-09-17 17:02:53
                [sub_total] => 786
            )

        [4] => Array
            (
                [placed] => 2013-09-16 17:02:53
                [sub_total] => 756
            )
    )
4

5 回答 5

4
$output=array();
foreach($yourArray as $values)
{
 $d=date("Y-m-d",strtotime($values["placed"]));
 $output[$d]["sub_total"]+=$values["sub_total"];
}

print_r($output);

小提琴

致谢:这个小提琴上使用的初始数组取自下面 Jason OOO 的答案。

于 2013-09-25T06:00:55.677 回答
2

您可以在查询时拥有这种数组。就像是

select date_field_name,other_field from table_name group by Day(date_feild_name);

之后,您可以使用 foreach 来处理每天的数据!

于 2013-09-25T06:03:14.897 回答
2

我也对此进行了测试:http: //phpfiddle.org/main/code/rzv-ngp

<?php
Array
(
    '0' => Array
        (
            'id' => '81',
            'placed' => '2013-09-19 16:32:53',
            'sub_total' => '786'
        ),

    '1' => Array
        (
            'id' => '80',
            'placed' => '2013-09-19 16:32:06',
            'sub_total' => '780'
        ),

//...
);

$newarray = array();
foreach ($array as $value){
 $temp = explode(" ", $value['placed']);
 $date = $temp[0];
    $total = (isset($newarray[$date]['sub_total']) ? $newarray[$date]['sub_total'] + $value['sub_total']: $value['sub_total']);
 $newarray[$date] = array('placed' => $date, 'sub_total' => $total);
}

print_r($newarray);

?>
于 2013-09-25T06:13:18.697 回答
2

尝试使用子查询

     select field_name,DAY(date_field) as date,(select sum(sub_total) where DAY(date_field)=date) as sub_total from table_name group by day(date_field)
于 2013-09-25T06:55:50.430 回答
0
Try this code
<?php
$shop = array(array( id => '81', 
                      placed => '2013-09-19',
                      sub_total => '786' 
                    ),
             array( id =>'80', 
                      placed => '2013-09-19',
                      sub_total => '780',
                    ),
              array( id => '79', 
                      placed => '2013-09-18',
                      sub_total => '786' 
                    ),
              array
                        (
                    id => '78',            
                    placed => '2013-09-18',
                    sub_total => '756'
                 ),
            array(
                     id => '77',          
                    placed => '2013-09-17',
                    sub_total => '786'
            ),
            array(
                     id => '76',          
                    placed => '2013-09-16',
                    sub_total => '756'
            )
             );
$result=array();
foreach($shop as $value)
{
    if(!isset($result[$value['placed']]))
    {
        //echo $value['placed'];
        //echo $result[$value['placed']];
        $result[$value['placed']]=array('placed'=>$value['placed'],'sub_total'=>0);


    }
    $result[$value['placed']]['sub_total']+=$value['sub_total'];
}

print_r($result);
//print_r($shop);
?>
于 2013-09-25T07:38:50.730 回答