2013-09-25 65 views
1

我有一个数组:集团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 
     ) 

    [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 
      ) 
    ) 
+0

为什么不从查询做,如果从数据库的结果呢? –

回答

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

?> 
+0

它的工作,但一个更多的问题: – user889349

+0

这回报我:阵列 ( [2013-09-19 ] =>数组 ( [置于] => 2013年9月19日 [TOTAL_PRICE] => 1850.6 – user889349

+0

是否有可能获得的输出是这样的:阵列 ( [0] =>数组 ( [置于] => 2013-09-19 [total_price] => 1850.6 – user889349

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

Credits:在这个小提琴上使用的初始数组从下面的Jason OOO回答。

+0

错误:未定义索引:2013-09-19 – user889349

+0

这是通知,不是错误。你可以定义该索引之前,如果你愿意 –

+0

你走了,看到这个小提琴:http://codepad.org/2ZL2KiRy –

2

你可以在查询的时候有这样的数组。类似于

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

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

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