按小时对时间值进行分组


Grouping times values by hour

我的查询结果如下:

05:02:00    
05:22:00    
05:48:00    
06:17:00    
06:41:00    
07:10:00    
07:27:00    
07:46:00

我想实现的是这样:

5 - 02, 22, 48
6 - 17, 41
7 - 10, 27, 46

我如何用PHP实现它?

SELECT HOUR(datetime) h, GROUP_CONCAT(MINUTE(datetime)) m
FROM table
GROUP BY h

代码(Codepad上的演示):

<?php
$result = array('05:02:00', // Your data array.
'05:22:00', 
'05:48:00',    
'06:17:00',    
'06:41:00',    
'07:10:00',    
'07:27:00',   
'07:46:00');
$end = array(); // Create array to hold grouped values.
foreach($result as $r) { // Loop over data array.
    $part = explode(':', $r); // Create array from strings.
    $end[$part[0]][] = $part[1]; // Store values inside $end array
}
echo '<pre>' . print_r($end, TRUE) . '</pre>'; // Echo array as preformatted text.
?>

输出:

Array
(
    [05] => Array
        (
            [0] => 02
            [1] => 22
            [2] => 48
        )
    [06] => Array
        (
            [0] => 17
            [1] => 41
        )
    [07] => Array
        (
            [0] => 10
            [1] => 27
            [2] => 46
        )
)

要获得您要求的输出:

5 - 02, 22, 48
6 - 17, 41
7 - 10, 27, 46

使用代替echo print_r()

foreach($end as $hour => $minutes) {
    echo ltrim($hour, '0') . ' -';
    foreach($minutes as $index => $minute) {
        $comma = (($index + 1) == count($minutes)) ? '' : ',';
        echo ' ' . $minute . $comma;
    }
    echo '<br/>';
}