Järjestyskäskyt osoiterivillä muotoa: sort=2A-5D-3
Tämän olisi tarkoitus järjestää tietokannasta saatu kaksiulotteinen taulukko ensin taulukon kakkosindeksin mukaan nousevasti, sitten vitosindeksin mukaan laskevasti ja lopuksi kolmosindeksin mukaan nousevasti. Järkeilin tätä niin, että toisin sanoen skriptin tulisi suorittaa käsky
array_multisort($arr_sort[2], $arr_sort[5], SORT_DESC, $arr_sort[3], $arr)
(missä $arr_sort on lowercase-ilmentymä taulukosta $arr). Sain muodostettua merkkijonon multisortin parametreista, joka oli esim. muotoa
$multisortquery = '$arr_sort[4], 3, $arr'
vaan evalin kanssa sain aina jotakin virhettä aikaiseksi (lähinnä parse-erroria). Kokeilin mm. tällaisen kaltaisia:
eval("array_multisort($multisortquery);"); eval('array_multisort($multisortquery);'); array_multisort(eval($multisortquery));
Olisikohan jollain parempaa tietoa evalin oikeaoppisesta käytöstä tai jotakin vaihtoehtoista lähestysmistapaa ongelmaan? Mietin myös usean multisortin ajoa loopilla vaan kuinkas skripti sitten muistaa säilyttää jo tehdyt järjestykset seuraavan kierroksen sorttauksessa.
Ps. Tarvittavat varotoimenpiteet evalin käytössä on tehty.
No tähän tapaan se ainakin toimii:
$es = 'array_multisort($arr_sort[4], 3, $arr);'; eval($es);
Nojuu, taisin testata tuotakin, virheilmoitus on ainakin tuttu:
Warning: array_multisort(): Array sizes are inconsistent in /ftphome/animelegacy/REQUIRE/al_functions.inc.php(131) : eval()'d code on line 1
Indeksien taulukot tosiaan ovat eri kokoa kuin koko taulukko, selkeä virhe siis sinänsä. Tosin ei auta puusta pitkään ko pitäisi $arr_sort sortata ja saada $arr-taulukon muokkaamattomat tekstirivit samoille paikoille kuin multisortatussa $arr_sortissa. On kyllä mahdollisimman käyttäjäepäystävällinen funktio koko array_multisort, olkoon miten hip'n'cool hyvänsä äärettömine parametreineen.
Mielestäni tuossa funktiossa ei olisi mitään järkeä jos nuo taulukot voisivat olla erikokoiset. Voitko hieman selventää tuota tietokannan rakennetta ja tapaa millä luot tuon arr_sort-taulukon.
Luovuin PHP-purkasta kun voi tehdä suoraan kyselyssä. Ratkaisu löytyi vähän (turhan) myöhään kun en SQL:ää vielä niin hyvin tunne.
Ratkaisu:
Tietokantakyselyssä sorttaus "ORDER BY $indeksi1 $suunta1, $indeksi2 $suunta2..". (Ja niin etiäpäin kunnes kyselystä löytyy kaikki annetut järjestyssäännöt)
Hehee... meinasin heti alussa jo kysyä, että mikset tee sorttausta kyselyssä, mutta ajattelin, että kait tarkotat tietokannalla kluitenkin tekstitiedostoa. :)
Aihe on jo aika vanha, joten et voi enää vastata siihen.