按日期分组php数组

时间:2013-09-25 05:56:26

标签: php arrays datetime grouping

我有一个数组:

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

5 个答案:

答案 0 :(得分: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);

<强> Fiddle

致谢:这个小提琴上使用的最初数组来自Jason OOO的回答。

答案 1 :(得分:2)

您可以在查询时使用这种数组。像

这样的东西
select date_field_name,other_field from table_name group by Day(date_feild_name);

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

答案 2 :(得分: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);

?>

答案 3 :(得分: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)

答案 4 :(得分: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);
?>