Hướng dẫn group by array php - nhóm theo mảng php

1

Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.Learn more.
Learn more.

Tôi có một mảng:

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

Có thể nhóm dữ liệu này theo ngày và tóm tắt số lượng phụ để nhận mảng đầu ra:

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

Hướng dẫn group by array php - nhóm theo mảng php

Mickmackusa

39,4K11 Huy hiệu vàng76 Huy hiệu bạc117 Huy hiệu đồng11 gold badges76 silver badges117 bronze badges11 gold badges76 silver badges117 bronze badges

Hỏi ngày 25 tháng 9 năm 2013 lúc 5:56Sep 25, 2013 at 5:56Sep 25, 2013 at 5:56

1

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

print_r($output);

Vĩ cầm

Tín dụng: Mảng ban đầu được sử dụng trên fiddle này được lấy từ câu trả lời của Jason Ooo bên dưới.

Đã trả lời ngày 25 tháng 9 năm 2013 lúc 6:00Sep 25, 2013 at 6:00Sep 25, 2013 at 6:00

Hanky ​​pankyhanky pankyHanky PankyHanky Panky

46.3k8 Huy hiệu vàng70 Huy hiệu bạc95 Huy hiệu Đồng8 gold badges70 silver badges95 bronze badges8 gold badges70 silver badges95 bronze badges

3

Tôi cũng đã thử nghiệm điều này: 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);

?>

Đã trả lời ngày 25 tháng 9 năm 2013 lúc 6:13Sep 25, 2013 at 6:13Sep 25, 2013 at 6:13

Jason Ooojason OOOJason OOOJason OOO

3.5572 Huy hiệu vàng25 Huy hiệu bạc31 Huy hiệu Đồng2 gold badges25 silver badges31 bronze badges2 gold badges25 silver badges31 bronze badges

3

Bạn có thể có loại mảng đó vào thời gian truy vấn. Cái gì đó như

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

Sau đó, bạn có thể sử dụng Foreach để làm việc với dữ liệu của mỗi ngày!

Đã trả lời ngày 25 tháng 9 năm 2013 lúc 6:03Sep 25, 2013 at 6:03Sep 25, 2013 at 6:03

Reza Saberireza SaberiReza SaberiReza Saberi

7.0629 Huy hiệu vàng45 Huy hiệu bạc76 Huy hiệu đồng9 gold badges45 silver badges76 bronze badges9 gold badges45 silver badges76 bronze badges

Thử sử dụng truy vấn phụ

     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)

Đã trả lời ngày 25 tháng 9 năm 2013 lúc 6:55Sep 25, 2013 at 6:55Sep 25, 2013 at 6:55

NikhilnikhilNikhilNikhil

Huy hiệu bạc 1011 Huy hiệu đồng1 silver badge9 bronze badges1 silver badge9 bronze badges

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

Đã trả lời ngày 25 tháng 9 năm 2013 lúc 7:38Sep 25, 2013 at 7:38Sep 25, 2013 at 7:38