Sain hyvän idean jäsenetn listaamiseen ja onnistuinkin siinä ihan kohtalaisesti:
http://koti.mbnet.fi/ztomiz/jarjesto/aakkos_la.
Mutta miksiköhän ihmeessä nuo eivät tottele järjstäytymiskäskyjä niinkuin pitäisi?
Tässä vielä pätkä, jonka kopioin wanhoista keskusteluista ja jolla rupesin noita sorttailemaan.
//muodostetaan moniulotteinen taulukko tiedostosta $taulu = file("jasenet.txt"); for($i=0; $i<count($taulu);$i++){ $kayttajatiedot = explode("|",trim($taulu[$i])); for($k=0; $k<count($kayttajatiedot); $k++){ $kayttajat[$i]["col_$k"] = $kayttajatiedot[$k]; } } //tehdään "aputaulukko" $mix. sortataan 1. sarakkeen mukaan -> $det['col_0'] foreach ($kayttajat as $val => $det) $mix[$val] = $det['col_0']; //sortataan aputaulukon avulla array_multisort($mix, SORT_ASC, $kayttajat); print "\n<table border='0' bordercolor='#000000' cellpadding='2' cellspacing='2'>"; foreach($kayttajat as $kayttaja) { print " <tr>\n"; foreach($kayttaja as $arvo) print " <td><font face='verdana' size='1'> $arvo</td>\n"; print " </tr>\n"; } // foreach print "</table>\n<br><br>\n";
Kyllähän tuo tottelee ihan oikein tuota lajittelua, peruslajittelu tehdään ord:n (merkin ASCII-arvo) mukaan. Alla olevalla esimerkillä näet miten lajitellaan tavallisesti:
<?php $merkit = '1234567890!"#¤%&/()=?`@£${[]}\¨~^\'*+_.:,;ABCDEFGHIJKLMNOPQRSTUVWXYZÅÄÖabcdefghijklmnopqrstuvwxyzåäö'; $taulukko = array(); for ($i=0; $i<strlen($merkit);$i++) { $taulukko[] = $merkit{$i}; } sort($taulukko); echo stripslashes(implode("<br />", $taulukko)); ?>
sort-kohtaan voit sitten laitella haluamiasi lippuja
https://www.php.net/manual/en/function.sort.php:
SORT_REGULAR - compare items normally
SORT_NUMERIC - compare items numerically
SORT_STRING - compare items as strings
SORT_LOCALE_STRING - compare items as strings, based on the current locale. Added in PHP 5.0.2
ja katsoa miten lajittelu vaihtuu lipun mukaan.
Katsoitkos nyt aivan tarkkaan tuota:
kiinnitä huomiota _J-M_ ja akuumamatata nickien sijainteihin. noh lähden tuolla toisella jos se jotain auttaa.
Teitkö testin yllämainitulla skriptillä? se sorttaa myös _ isojen ja pienten kirjainten väliin koska
Z = 90
_ = 95
a = 97
Ja todisteena tästä:
<?php echo "Z = " . ord("Z"); echo "<br />"; echo "_ = " . ord("_"); echo "<br />"; echo "a = " . ord("a"); ?>
EDIT: ensimmäiseen testiskriptiin lisätty numerot jotka olivat unohtuneet.
Tuo sinun ensimmäinen testiscriptasi.. Mitä hait sillä.
Saan sen kyllä toimimaan niillä merkeillä, mutta sitten kun muutan sen:
$merkit = file("jasenet.txt");
niin tulee ilkeetä jälkeä, 5 ekaa riviä tiedostosta ja that's it ?
mmm.
Ei, kyseessä ei ollut ihmefiksaus joka sorttaisi halutulla tavalla (aluksi erikoismerkit, sitten aakkoset), vaan osoitus siitä että rutiinisi toimii kuten pitääkin.
Suorilta käsin en osaa kertoa miten tämän toteuttaisit, mutta ehkä esim. usort yhdistettynä johonkin omaan sorttausrutiiniin voisi toimia.
Noniin, sitä mäki vähä, näyttikihi iha oudolta :>
Noh täytyy tässä antaa ajatusten levätä ja kattoa vaikka huomenna uudestaan. Kertokaa toki jos keksitte jotain.
Tosiaan usortin avulla saa juuri semmoisen lajittelun kuin mieli tekee. Sille pitää vain antaa oma lajittelufunktio, joka palauttaa 0 (yhtä suuri), -1 (pienempi) tai 1 (suurempi). Seuraavassa esimerkissä lajittelussa otetaan huomioon ainoastaan aakkoset ja numerot. Isot ja pienet kirjaimet luetaan myös samoiksi.
<?php // tätä funktiota käytetään apuna lajittelussa function vertailu($a, $b) { // muutetaan merkit pieniksi ja poistetaan kaikki // muut paitsi kirjaimet ja numerot $a = preg_replace("/[^\w\d]/", "", strtolower($a)); $b = preg_replace("/[^\w\d]/", "", strtolower($b)); // palautetaan vertailun tulos if ($a == $b) return 0; return ($a < $b) ? -1 : 1; } // laitetaan tiedot taulukkoon $tiedot = array("-Maso-", "Konna", "_J-M_", "Red_Card"); // lajitellaan tiedot usort($tiedot, "vertailu"); // tulostetaan tiedot print_r($tiedot); // Array // ( // [0] => _J-M_ // [1] => Konna // [2] => -Maso- // [3] => Red_Card // ) ?>
Aihe on jo aika vanha, joten et voi enää vastata siihen.