Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] sortowanie tablicy
Forum PHP.pl > Forum > Przedszkole
semar
witam
oto problem który napotkałem:

Posiadam tablice z następującymi danymi
1 parametr to numer pozycji na liscie natomiast 2gi parametr to kolejno: 1-to nazwa pliku 2,3,4,5,6 to kolejno rok, miesiąc, dzień, godzina, minuta i sekunda utworzenia pliku,
tablica miała być sortowana skryptem wgl roku utworzenia pliku ktorego dotyczy dana pozycja jeśli rok utworzenia pliku na pozycji x jest równa z rokiem utworzenia pliku na pozycji x+1 to następuje porównanie miesiąca itd.
Jestem świadomy tego że ten skrypt gorzej napisać się nie dało, nie użyłem procedur etc. ale tak wygląda to przejżyściej. (chyba)

CODE
for ($j = 0; $j <= 20; $j++)
for ($i = 1; $i < $liczba_plikow; $i++)
{
if($tab[$i][1] < $tab[i+1][1])
{
$tab0[0] = $tab[$i][0];
$tab0[1] = $tab[$i][1];
$tab0[2] = $tab[$i][2];
$tab0[3] = $tab[$i][3];
$tab0[4] = $tab[$i][4];
$tab0[5] = $tab[$i][5];
$tab0[6] = $tab[$i][6];

$tab[$i][0] = $tab[$i+1][0];
$tab[$i][1] = $tab[$i+1][1];
$tab[$i][2] = $tab[$i+1][2];
$tab[$i][3] = $tab[$i+1][3];
$tab[$i][4] = $tab[$i+1][4];
$tab[$i][5] = $tab[$i+1][5];
$tab[$i][6] = $tab[$i+1][6];

$tab[$i+1][0] = $tab0[0];
$tab[$i+1][1] = $tab0[1];
$tab[$i+1][2] = $tab0[2];
$tab[$i+1][3] = $tab0[3];
$tab[$i+1][4] = $tab0[4];
$tab[$i+1][5] = $tab0[5];
$tab[$i+1][6] = $tab0[6];
}
if(($tab[$i][1] == $tab[i+1][1]) && ($tab[$i][2] < $tab[i+1][2] ))
{
$tab0[0] = $tab[$i][0];
$tab0[1] = $tab[$i][1];
$tab0[2] = $tab[$i][2];
$tab0[3] = $tab[$i][3];
$tab0[4] = $tab[$i][4];
$tab0[5] = $tab[$i][5];
$tab0[6] = $tab[$i][6];

$tab[$i][0] = $tab[$i+1][0];
$tab[$i][1] = $tab[$i+1][1];
$tab[$i][2] = $tab[$i+1][2];
$tab[$i][3] = $tab[$i+1][3];
$tab[$i][4] = $tab[$i+1][4];
$tab[$i][5] = $tab[$i+1][5];
$tab[$i][6] = $tab[$i+1][6];

$tab[$i+1][0] = $tab0[0];
$tab[$i+1][1] = $tab0[1];
$tab[$i+1][2] = $tab0[2];
$tab[$i+1][3] = $tab0[3];
$tab[$i+1][4] = $tab0[4];
$tab[$i+1][5] = $tab0[5];
$tab[$i+1][6] = $tab0[6];
}
if(($tab[$i][1] == $tab[i+1][1]) &&
($tab[$i][2] == $tab[i+1][2]) && ( $tab[$i][3] < $tab[i+1][3] ))
{
$tab0[0] = $tab[$i][0];
$tab0[1] = $tab[$i][1];
$tab0[2] = $tab[$i][2];
$tab0[3] = $tab[$i][3];
$tab0[4] = $tab[$i][4];
$tab0[5] = $tab[$i][5];
$tab0[6] = $tab[$i][6];

$tab[$i][0] = $tab[$i+1][0];
$tab[$i][1] = $tab[$i+1][1];
$tab[$i][2] = $tab[$i+1][2];
$tab[$i][3] = $tab[$i+1][3];
$tab[$i][4] = $tab[$i+1][4];
$tab[$i][5] = $tab[$i+1][5];
$tab[$i][6] = $tab[$i+1][6];

$tab[$i+1][0] = $tab0[0];
$tab[$i+1][1] = $tab0[1];
$tab[$i+1][2] = $tab0[2];
$tab[$i+1][3] = $tab0[3];
$tab[$i+1][4] = $tab0[4];
$tab[$i+1][5] = $tab0[5];
$tab[$i+1][6] = $tab0[6];
}
if(($tab[$i][1] == $tab[i+1][1]) &&
($tab[$i][2] == $tab[i+1][2]) &&
($tab[$i][3] == $tab[i+1][3]) && ( $tab[$i][4] < $tab[i+1][4] ))
{
$tab0[0] = $tab[$i][0];
$tab0[1] = $tab[$i][1];
$tab0[2] = $tab[$i][2];
$tab0[3] = $tab[$i][3];
$tab0[4] = $tab[$i][4];
$tab0[5] = $tab[$i][5];
$tab0[6] = $tab[$i][6];

$tab[$i][0] = $tab[$i+1][0];
$tab[$i][1] = $tab[$i+1][1];
$tab[$i][2] = $tab[$i+1][2];
$tab[$i][3] = $tab[$i+1][3];
$tab[$i][4] = $tab[$i+1][4];
$tab[$i][5] = $tab[$i+1][5];
$tab[$i][6] = $tab[$i+1][6];

$tab[$i+1][0] = $tab0[0];
$tab[$i+1][1] = $tab0[1];
$tab[$i+1][2] = $tab0[2];
$tab[$i+1][3] = $tab0[3];
$tab[$i+1][4] = $tab0[4];
$tab[$i+1][5] = $tab0[5];
$tab[$i+1][6] = $tab0[6];
}
if(($tab[$i][1] == $tab[i+1][1]) &&
($tab[$i][2] == $tab[i+1][2]) &&
($tab[$i][3] == $tab[i+1][3]) &&
($tab[$i][4] == $tab[i+1][4]) && ( $tab[$i][5] < $tab[i+1][5] ))
{
$tab0[0] = $tab[$i][0];
$tab0[1] = $tab[$i][1];
$tab0[2] = $tab[$i][2];
$tab0[3] = $tab[$i][3];
$tab0[4] = $tab[$i][4];
$tab0[5] = $tab[$i][5];
$tab0[6] = $tab[$i][6];

$tab[$i][0] = $tab[$i+1][0];
$tab[$i][1] = $tab[$i+1][1];
$tab[$i][2] = $tab[$i+1][2];
$tab[$i][3] = $tab[$i+1][3];
$tab[$i][4] = $tab[$i+1][4];
$tab[$i][5] = $tab[$i+1][5];
$tab[$i][6] = $tab[$i+1][6];

$tab[$i+1][0] = $tab0[0];
$tab[$i+1][1] = $tab0[1];
$tab[$i+1][2] = $tab0[2];
$tab[$i+1][3] = $tab0[3];
$tab[$i+1][4] = $tab0[4];
$tab[$i+1][5] = $tab0[5];
$tab[$i+1][6] = $tab0[6];
}
if(($tab[$i][1] == $tab[i+1][1]) &&
($tab[$i][2] == $tab[i+1][2]) &&
($tab[$i][3] == $tab[i+1][3]) &&
($tab[$i][4] == $tab[i+1][4]) &&
($tab[$i][5] == $tab[i+1][5]) && ( $tab[$i][6] < $tab[i+1][6] ))
{
$tab0[0] = $tab[$i][0];
$tab0[1] = $tab[$i][1];
$tab0[2] = $tab[$i][2];
$tab0[3] = $tab[$i][3];
$tab0[4] = $tab[$i][4];
$tab0[5] = $tab[$i][5];
$tab0[6] = $tab[$i][6];

$tab[$i][0] = $tab[$i+1][0];
$tab[$i][1] = $tab[$i+1][1];
$tab[$i][2] = $tab[$i+1][2];
$tab[$i][3] = $tab[$i+1][3];
$tab[$i][4] = $tab[$i+1][4];
$tab[$i][5] = $tab[$i+1][5];
$tab[$i][6] = $tab[$i+1][6];

$tab[$i+1][0] = $tab0[0];
$tab[$i+1][1] = $tab0[1];
$tab[$i+1][2] = $tab0[2];
$tab[$i+1][3] = $tab0[3];
$tab[$i+1][4] = $tab0[4];
$tab[$i+1][5] = $tab0[5];
$tab[$i+1][6] = $tab0[6];
}


}


przed posortowaniem:
pozycja_rok_miesiac_dzien_godzina_minuta_sekunda_nazwa pliku
CODE
1__2012__07__22__20__27__00__1332008653513.jpg
2__2012__06__27__17__56__16__3.jpg
3__2012__07__22__18__13__18__8.jpg
4__2012__06__27__17__55__59__1.jpg
5__2012__07__22__20__59__53__1332112773691.jpg
6__2012__06__27__17__56__34__5.jpg
7__2012__06__27__17__56__07__2.jpg
8__2012__06__27__17__56__44__7.jpg
9__2012__07__22__20__27__20__1332201127422.jpg
10__2012__06__27__17__56__21__4.jpg
11__2012__06__27__17__56__41__6.jpg


po posortowaniu:
pozycja_rok_miesiac_dzien_godzina_minuta_sekunda_nazwa pliku
CODE
1__2012__07__22__20__27__00__1332008653513.jpg
2__2012__07__22__20__59__53__1332112773691.jpg
3__2012__07__22__20__27__20__1332201127422.jpg
4__2012__06__27__17__56__41__6.jpg
5__2012__06__27__17__56__16__3.jpg
6__2012__06__27__17__55__59__1.jpg
7__2012__06__27__17__56__34__5.jpg
8__2012__06__27__17__56__07__2.jpg
9__2012__06__27__17__56__44__7.jpg
10__2012__06__27__17__56__21__4.jpg
11__2012__07__22__18__13__18__8.jpg


Nie wiem dlaczego np 8.jpg znajduje sie na końcu, dlaczego plik z 2 pozycji nie jest pierwszy.
semar
Przepraszam błąd:
2gi parametr tablicy:
0-nazwa pliku
1-rok
2-miesiąc
3-dzień
4-godzina
5-minuta
6-sekunda
lobopol
http://php.net/manual/en/function.array-multisort.php użyj, a nie wymyślaj koło na nowo albo jeszcze lepiej zapisz sobie w tablicy zamiast rok, miesiąc, dzień etc po prostu timestampa
  1. $tablica = array(
  2. 0 => array(timestamp, 'plik1'),
  3. 1 => array(1234567, 'plik2'),
  4. 2 => array(1234567, 'plik3'),
  5. )


i po nim posortuj, nie wiem w jakim celu tak sobie utrudniasz.
semar
Ciężko korzystać z czegoś o istnieniu czego się nie wie, żadnego kursu nie przerabiam bo to tylko 1 strone napisać potrzebuje. Dzięki, 3m się wink.gif
semar
array_multisort nie jest dla mnie takie oczywiste, mógłby ktoś napisać ten skrypt na podstawie mojej tablicy ?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.