Kun sort()-funktiolla pystyy järjestelmään 2D-taulukosta sen 0,0 - max,0 rivin, niin miten päästään käsiksi, että voidaan järjeställä vaikka 0,1 - max,1 rivin jne... ?
Yksi ratkaisu on käyttää funktiota usort, jolloin voi tehdä oman järjestysfunktion. Tätä funktiota PHP käyttää sitten järjestäessään taulukon. Funktio saa parametrikseen kaksi taulukon riviä ja sen täytyy palauttaa kokonaisluku, joka ilmaisee niiden järjestyksen toisiinsa nähden. Funktion täytyy palauttaa negatiivinen luku, jos ensimmäinen rivi tulee toista ennen, positiivinen luku, jos ensimmäinen rivi tulee toisen jälkeen, ja nolla, jos rivit kuuluvat samaan kohtaan.
<?php $taulu = array(array("Mozart", 1756), array("Brahms", 1833), array("Beethoven", 1770), array("Bach", 1685)); function jarj($a, $b) { // verrataan rivin toista saraketta if ($a[1] < $b[1]) return -1; if ($a[1] > $b[1]) return 1; if ($a[1] == $b[1]) return 0; } usort($taulu, jarj); print_r($taulu); ?>
Toinen menetelmä on luoda kaksisarakkeinen aputaulukko, jonka ensimmäinen sarake on alkuperäisen taulukon sarake, jonka mukaan täytyy järjestää, ja toinen sarake on alkuperäisen taulukon koko rivi. Tämän taulukon voi järjestää funktiolla sort, ja sitten uuteen taulukkoon pitää enää valita aputaulukon toiset sarakkeet.
<?php $taulu = array(array("Mozart", 1756), array("Brahms", 1833), array("Beethoven", 1770), array("Bach", 1685)); for ($i = 0; $i < count($taulu); $i++) { $apu[] = array($taulu[$i][1], $taulu[$i]); } sort($apu); for ($i = 0; $i < count($apu); $i++) { $uusi[] = $apu[$i][1]; } print_r($uusi); ?>
Myös funktio array_multisort voisi tulla kysymykseen, mutta en oikein ymmärrä sen toimintaa.
Aihe on jo aika vanha, joten et voi enää vastata siihen.