按嵌套循环中的日期排序

时间:2013-05-05 15:50:54

标签: php arrays foreach

我在while循环中有一个嵌套的foreach循环。我从myqsl文本字段中提取与范围匹配的日期。唯一的问题是我在提取文本字段后无法按日期排序。如果我将相同的日期(在本例中为02.01.2013)分成两个不同的文本字段,它将在输出中显示为:

       TOUR 1  
       01.01.2013
    -> 02.01.2013 
    -> 03.01.2013
       04.01.2013

       TOUR 2
    -> 02.01.2013 
    -> 03.01.2013    

我无法弄清楚循环后如何按日期($天)分组。我知道解决方案是为此创建一个数组,但如何?

这是我的代码:

     $sql = "SELECT accommodation, start FROM circuits_".$_POST['year']." 
     WHERE start >='".$first."' AND start <= '".$last."' 
     ORDER BY start";
     $rows = $db->query($sql);

     while ($record = $db->fetch($rows)) { 

     $data_acc = explode(';',$record['accommodation'], -1);

     foreach($data_acc as $row_acc) {
     list($day,$name,$sgl,$dbl) = explode('|',$row_acc);

感谢名单

2 个答案:

答案 0 :(得分:0)

我觉得你在找这样的东西? (将ORDER BY替换为GROUP BY

$sql = "SELECT accommodation, start FROM circuits_".$_POST['year']." 
 WHERE start >='".$first."' AND start <= '".$last."' 
 GROUP BY start";
 $rows = $db->query($sql);

 while ($record = $db->fetch($rows)) { 
    //do whatever..
 }

答案 1 :(得分:0)

如果在将数据存储到数据库之前将数据拆分为字段,那么您的开发将不那么复杂。

在不更改当前架构的情况下,您可以使用uksort()对阵列进行后处理。使用uksort将允许您在比较它们之前解析日期。或者,您可以将每个日期转换为ISO-8601,然后将其存储在列表中并使用更简单的ksort()。