Hei,
mikä olisi järkevin tapa aakkostaa PHP:tä käyttäen tiedosto joka on tätä tyyppiä:
Anselmi|Sähköpostiosoite Olli|Sähköpostiosoite Kalevi|Sähköpostiosoite
Haluaisin siitä seuraavanlaisen arrayn:
Array ( [0] => Anselmi|Sähköpostiosoite [1] => Kalevi|Sähköpostiosoite [2] => Olli|Sähköpostiosoite )
eli aakkosjärjestys tuon nimen perusteella.
Kiitoksia jo etukäteen.
function cmp($a, $b) { return strcmp( strstr($a, '|', true), strstr($b, '|', true) ); } $data = array('Pekka|pekka@email', 'Anna|annukka@email', 'Veijo|posti@pee', 'Reija|rauh@spost'); usort($data, 'cmp'); print_r($data);
Yksi vaihtoehto.
Edit: Alchemist ehtikin näköjään ensin ja parempi ratkaisu. Ajattelisin että omanikin on riittävän hyvä useimmissa tapauksissa.
sort()
sotki kokonaan kokeilinkin sitä jo aiemmin. Kokeilen tuota The Alchemistin vinkkiä pian,kiitos.
Nyt jotenkin vähän pätkii. Menin jo korjaamaan tuota esimerkkiäni älykkäämmäksi mutta samalla hokaisin, että kyllähän noi valmisfunktiotkin toimivat, kuten Grez esitteli jo. Jos sulla on ongelmia, niin evotat jossain muualla.
Jääkööt nyt tuohon näkyville tuo, jos joskus tarvitsee esimerkiksi sortata merkkijonon keskeltä löytyvän datan mukaan...
Olli kirjoitti:
sort()
sotki kokonaan kokeilinkin sitä jo aiemmin.
En kyllä ymmärrä miten. Ehkä se meni sekaisin jo lukuvaiheessa?
Ainakin mulla toimii: http://grez.info/putka/Olli/sort.php (lähdekoodi)
Voisiko olla mahdollista, että tiedosto ei olekaan aivan tuota tyyppiä.
Tällainen tiedosto on ongelma Grezin koodille:
aa|1 aab|2
Aakkosjärjestyksessä aa on ennen kuin aab, mutta koodi järjestää ne päinvastoin, koska | on aakkosissa b:n jälkeen.
Joo, ei ollut tarkoitus sanoa, että se olisi täydellinen, mutta ei sillä täysin sekaisin pitäisi mennä.
Tässä voi tietysti hämätä, kun viestini on tuossa Alchemistin viestin jälkeen, eli voisi kuvitella että esitän sitä jotenkin parempana vaihtoehtona. Alchemistin viestiä ei ollut silloin kun omaani kirjoitin.
Enpähän itsekään tainnut tiedostaa tuota ongelmaa mutten ainakaan tehnyt turhaa työtä. :))
Aihe on jo aika vanha, joten et voi enää vastata siihen.