Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: PHP: 2d-taulun järjestely

Triton [17.08.2008 17:06:48]

#

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... ?

Antti Laaksonen [17.08.2008 23:47:36]

#

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.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta