Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Jäsenien listaaminen

Sivun loppuun

chiqu [08.01.2005 15:12:37]

#

Sain hyvän idean jäsenetn listaamiseen ja onnistuinkin siinä ihan kohtalaisesti:

http://koti.mbnet.fi/ztomiz/jarjesto/aakkos_la.php

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";

leftover [08.01.2005 15:47:38]

#

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.

chiqu [08.01.2005 15:55:11]

#

Katsoitkos nyt aivan tarkkaan tuota:

kiinnitä huomiota _J-M_ ja akuumamatata nickien sijainteihin. noh lähden tuolla toisella jos se jotain auttaa.

leftover [08.01.2005 16:06:25]

#

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.

chiqu [08.01.2005 17:49:48]

#

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.

http://koti.mbnet.fi/ztomiz/jarjesto/sort_harjoitus.php

leftover [08.01.2005 18:03:28]

#

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.

chiqu [08.01.2005 18:12:27]

#

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.

Antti Laaksonen [08.01.2005 19:01:05]

#

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
// )

?>

Sivun alkuun

Vastaus

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

Tietoa sivustosta