Autor Zpráva
drozdo
Profil
Zdravim potrboval by som utriedit nejak jednoducho taketo pole:

array = {
0 -> "28.02.2010;Stane sa nieco;obrazok.jpg",
1 -> "07.01.2010;Stalo sa nieco;bla.jpg",
2 -> "14.07.2010;safsbldsf;ha.jpg
}


a potreboval by som to utriedit podla datumu (tej prvej zlozky v kazdom riadku).
teda napriklad pole2 by vyzeralo:
array = {
0 -> "07.01.2010;Stalo sa nieco;bla.jpg",
1 -> "28.02.2010;Stane sa nieco;obrazok.jpg", 
2 -> "14.07.2010;safsbldsf;ha.jpg
}


Velmi dakujem
Nox
Profil
V tomhle případě podle mě pouze http://www.php.net/manual/en/function.usort.php
fajzen
Profil
drozdo:
myslím, že keďže je dátum prvý a je vo formáte dd.mm.yyyy, na spojení kľúč->hodnota v poli pravdepodobne nezáleží, tak by mohlo stačiť aj obyčajné sort()

sorry, nie, keby bol formát dátumu yyyy.mm.dd tak by to šlo, takto treba naozaj usort
drozdo
Profil
nejak to nemozem dostat do tej mojej pozidavaky asi budem musiet vytvorit vlastne funkcie...
AM_
Profil
jo, řešení je usort - třídění dle vlastní funkce. Napíšeš si funkci, která porovná dva řetězce podle datumu, a následně jí jako parametr callback předáš funkci usort.
imploder
Profil
usort() je nestabilní (tj. u stejných prvků se nemusí zachovat jejich původní pořadí). Pokud je stabilita nutná, dá se použít třeba mergesort tady v komentářích usortu.
drozdo
Profil
spravil som to takto nejak, hadam je to najlepsie riesenie, ak nie pls kritiku...
function cmp($a, $b)
{
    return strcmp(strtotime($a[0]), strtotime($b[0]));
}

$file = 'akce.txt';
$fj = fopen($file, 'r');
if($fj) {
$counter = fread($fj, filesize($file));
$riadok = explode("\n", $counter);
fclose($fj);

$pocetriadkov = count($riadok);

for ($i = 0; $i < $pocetriadkov; $i++) {
  $pole[$i] = explode(";",$riadok[$i]);
  
  $rozdel = explode(".",$pole[$i][0]);             //pre php4 (strtotime)
  $pole[$i][0]= $rozdel[2]."/".$rozdel[1]."/".$rozdel[0];     //  date (Y/m/d)
}

usort($pole, "cmp");

while (list($key, $value) = each($pole)) {
    echo "\datum[$key]: " . $value[0] . "\n";
}
} else { $error = 5; }

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0