Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Taulukon järjestäminen aakkosiin PHP:llä - isot ja pienet kirjaimet???

Samsu [11.03.2007 19:01:32]

#

Miten saisi helposti tiedostosta taulukkoon luetut tiedot järjestettyä aakkosiin siten, ettei ole väliä isoilla ja pienillä kirjaimilla???

Eli käytännössä palvelimella on 'ilmolista.txt' -niminen tiedosto, jossa on dataa:
Nimi1|muuta|muuta|muuta
nimi2|muuta|muuta|muuta
Nimi3|muuta|muuta|muuta

Osa riveistä siis alkaa isolla kirjaimella ja osa saattaa alkaa pienellä. Tavallisella sort -komennolla (kts. alla) kun nämä järjestelee, niin tuloksena on että ensin tulee isolla kirjaimella alkavat rivit ja vasta sitten pienellä kirjaimella, kun tavoite olisi että rivit tulee aakkosissa riippumatta isosta/pienestä kirjaimesta.

<?php
//luetaan viestit taulukkoon
$viestit = file("ilmolista.txt");

//järjestetään viestit aakkosiin
sort($viestit);

tgunner [11.03.2007 20:00:07]

#

Muutat ensin vaikka tiedot pieniksi/isoiksi kirjaimiksi ja järjestelet sitten? Vai täytyykö tietojen säilyä muuttumattomana?

ozmou [11.03.2007 20:05:26]

#

Tässä mun ehdotus. Tiedot pysyy muuttumattomina. Muitakin vaihtoehtoja on varmasti mutta tämä tuli mulle ekana mieleen.

<?php
//luetaan viestit taulukkoon
$viestit = file("ilmolista.txt");

//järjestetään viestit aakkosiin
for($i=0;$i<count($viestit);$i++) {
	$osat = explode("|",$viestit[$i]);
	$nimet[$i] = strtolower($osat[0]);
}
array_multisort($nimet,SORT_ASC,$viestit);
?>

Samsu [11.03.2007 21:47:14]

#

Kiitokset koodipätkästä ozmoulle; toimii kun junan vessa =)

EDIT: Piti kuitenkin vielä muokata koodia siten, että järjestämisskripitä ei ajeta, jos ilmolista.txt on tyhjä (tulee array_multisortista muuten virheilmoitus)

<?php
//viestien määrä on suoraan taulukon rivien määrä
$viestimaara = count($viestit);

//jos viestejä on, järjestetään viestit aakkosiin
if ($viestimaara !=0){

...ja tähän sitten for...

msdos464 [14.03.2007 07:57:54]

#

Itse olisin käyttänyt usort:ia.. (toivottavasti muistan alkukirjaimen oikein) :)

Vastaus

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

Tietoa sivustosta