Сортировка по параметру

Тема в разделе "PHP программирование", создана пользователем egor811, 8 окт 2010.

  1. egor811

    egor811 Member

    Регистрация:
    8 окт 2010
    Сообщения:
    5
    Симпатии:
    0
    Код (PHP):
    <?php
    $g[0]="13.08.1998";
    $g[1]="13.08.1998";
    $g[2]="29.05.2007";
    $g[3]="08.07.2008";
    $g[4]="07.06.2005";
    $g[5]="07.04.1991";
    $g[6]="14.11.1991";
    $g[7]="03.03.2003";
    $g[8]="07.05.2002";
    $g[9]="07.12.2001";
    $g[10]="06.02.2017";
    $g[11]="31.04.2008";
    $g[12]="08.11.1992";
    $g[13]="28.03.1994";
    $g[14]="19.06.1996";
    $g[15]="01.01.2009";
    $g[16]="15.05.2009";
    $g[17]="08.08.2007";
    $g[18]="07.04.2015";
    $g[19]="16.02.2023";
    $g[20]="18.05.2001";
    $g[21]="07.09.2009";
    $g[22]="05.12.2012";
    $g[23]="21.12.2012";
    $g[24]="08.07.2005";
    $g[25]="19.05.2000";
    $g[26]="06.05.2007";
    $g[27]="05.04.2003";
    $g[28]="03.09.2010";
    $g[29]="06.06.2003";


    for($j=2;$j>=0;$j--)
    {
    switch($j)
    {
    case 2:
    for($i=0; $i<= count($g); $i++)
    {
    $e = explode(".",$g[$i]);
    $e1 = explode(".",$g[$i+1]);
    if($e[$j] < $e1[$j])
    {
    $k=$g[$i];
    $g[$i]=$g[$i+1];
    $g[$i+1]=$k;
    $i=0;
    }
    }
    break;
    case 1:
    for($i=0; $i<= count($g); $i++)
    {
    $e = explode(".",$g[$i]);
    $e1 = explode(".",$g[$i+1]);
    if($e[2]==$e1[2])
    {
    if($e[1]<$e1[1])
    {
    $k=$g[$i];
    $g[$i]=$g[$i+1];
    $g[$i+1]=$k;
    $i=0;
    }
    }
    }
    break;
    case 0:
    for($i=0; $i<= count($g); $i++)
    {
    $e = explode(".",$g[$i]);
    $e1 = explode(".",$g[$i+1]);
    if(($e[1]==$e1[1])and($e[2]==$e1[2]))
    {
    if($e[0]<$e1[0])
    {
    $k=$g[$i];
    $g[$i]=$g[$i+1];
    $g[$i+1]=$k;
    $i=0;
    }
    }
    }
    break;
    }  
    }
    for($i=0; $i<= count($g); $i++)
    {
    echo($g[$i]."<br>");
    }
    ?>
    выдает:
    13.08.1998
    16.02.2023
    06.02.2017
    07.04.2015
    21.12.2012
    05.12.2012
    03.09.2010
    07.09.2009
    15.05.2009
    01.01.2009
    08.07.2008
    31.04.2008
    08.08.2007
    29.05.2007
    06.05.2007
    08.07.2005
    07.06.2005
    06.06.2003
    05.04.2003
    03.03.2003
    07.05.2002
    07.12.2001
    18.05.2001
    19.05.2000
    13.08.1998
    19.06.1996
    28.03.1994
    08.11.1992
    14.11.1991
    07.04.1991


    Соответственно - не правильно. Можно заметить, что все элементы стоят на своих местах акромя первого. Я, в принципе, понимаю, что где то с индексированием, но вот в каком месте - понять не могу.
     
  2. acorn

    acorn PHP Developer

    Регистрация:
    29 авг 2004
    Сообщения:
    599
    Симпатии:
    3
    Это ж надо было додуматься так обращаться с датами, а если будет дата mm.dd.yy вы будете переписывать алгоритм? Почитайте лучше функции для работы с датой-временем, работать с timestamp куда приятнее, чем парсить каждый раз строку.
     
  3. egor811

    egor811 Member

    Регистрация:
    8 окт 2010
    Сообщения:
    5
    Симпатии:
    0
    Согласен, но это не решает задачи.
    Забыл добавить, что это еще и инема файлов, хотя видимо без разницы....
     
  4. egor811

    egor811 Member

    Регистрация:
    8 окт 2010
    Сообщения:
    5
    Симпатии:
    0
    Большое спасибо. Действительно очень удобно используется timestamp.

    Код (PHP):
    <?php
    $g=scandir("./files");

    for($i=2;$i<count($g);$i++){
    $d=explode(".",$g[$i]);
    $date[$i-2]=mktime(0,0,0,$d[1],$d[0],$d[2]);
    }
    rsort($date);
    for($i=0;$i<count($date);$i++){
    echo(date('d.m.Y',$date[$i]));
    echo("<br>");
    }
    ?>

    А еще можно использовать scandir(string folder[, 1 or 0])
    при использоавнии 2ого параметра сортируется по убыванию или возрастпнию.
    Всем спасибо, можно закрывать тему.
     
Загрузка...

Поделиться этой страницей