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

08.10.2010
5
0
#1
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


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

acorn

PHP Developer
29.08.2004
585
3
#2
Это ж надо было додуматься так обращаться с датами, а если будет дата mm.dd.yy вы будете переписывать алгоритм? Почитайте лучше функции для работы с датой-временем, работать с timestamp куда приятнее, чем парсить каждый раз строку.
 
08.10.2010
5
0
#3
Это ж надо было додуматься так обращаться с датами, а если будет дата mm.dd.yy вы будете переписывать алгоритм? Почитайте лучше функции для работы с датой-временем, работать с timestamp куда приятнее, чем парсить каждый раз строку.
Согласен, но это не решает задачи.
Забыл добавить, что это еще и инема файлов, хотя видимо без разницы....
 
08.10.2010
5
0
#4
Большое спасибо. Действительно очень удобно используется 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ого параметра сортируется по убыванию или возрастпнию.
Всем спасибо, можно закрывать тему.