Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Paremmuusjärjestys *PHP*

Sivun loppuun

Gwaur [05.09.2003 09:54:29]

#

Olen tekemässä IRC-quotes:n tapaista omaa paikkaa, ja pitää saada pistettyä quotet paremmuusjärjestykseen. Jos quotet on tyyliin:

pisteet|ID|<nick> moi!

niin miten saisi järjestettyä quotet pisteiden mukaisesti?

kokeilin sort() mutta se ei tee oikein koska näin:

12|1|<nick> moi!
6|2|<poi> eksyin
2|3|<ahfds> judvsu

niin toi ID-3 tulee ennen ID-2:ta koska numero 2 tulee järjestyksessä ennen 6:ta.
tein tyyliin:

12|1|<nick> moi!
 6|2|<poi> eksyin
 2|3|<ahfds> judvsu

eli ne missä on vähemmän numeroita kuin toss parhaimmassa, saa ylimääräisen välin/ylimääräisiä välejä eteen.
Ongelmana on nyt se kun pitäis sitten tehdä scripti joka älyää pistää oikean määrän välilyöntejä. En tällaista jaksa tehdä, jotenka olisi erittäin mukavaa jos sen saisi numerojärjestykseen ilman tommoisia turhia välejä tms...

Kiitos

thefox [05.09.2003 10:33:31]

#

Osa selostuksista meni kyllä hieman yli hilserajan, tarkista josko selostukseesi olisi lipsahtanut muutama virhe.

trinit [05.09.2003 12:05:09]

#

lainaus:

eli ne missä on vähemmän numeroita kuin toss parhaimmassa, saa ylimääräisen välin/ylimääräisiä välejä eteen.

Kokeilepa poistaa trim() funktiolla tyhjät välit merkkijonosta ja sen jälkeen järjestelet uudestaan. Explode:lla varmaankin luet | -merkkien välissä olevat tiedot?

Gwaur [05.09.2003 13:05:27]

#

lainaus:

Explode:lla varmaankin luet | -merkkien välissä olevat tiedot?

joo..

PS: oho, tämä ohjelmointiputka ei nähtävästi pistä välilyöntejä rivin eteen jos niitä siinä on..
No tossa alimmassa ruudussa oli pisteiden edessä välilyönnit...

NiKC [10.09.2003 16:01:54]

#

Offtopic...

Kyllä ne varmaan siinä on, mutta kun selaimet html-standardin mukaisesti ignoroi white-spacen.

arcatan [10.09.2003 17:44:34]

#

..ehkä kumminkin etsit funktiota rsort? sort järjestää ne tohon järjestykseen ja rsort päinvastaiseen järjestykseen.

Gwaur [10.09.2003 20:18:05]

#

lainaus:

..ehkä kumminkin etsit funktiota rsort? sort järjestää ne tohon järjestykseen ja rsort päinvastaiseen järjestykseen.

Tiedän, väärä funktio.
siis ongelmana on se, kun jos pisteissä on eri verran merkkejä, esim pistemäärässä 12 on enemmän merkkejä kuin pistemäärässä 6 ja 2, joten lyhyemmissä pistemäärissä pitää edessä olla välejä niin monta kuin on "monimerkkisimmän pistemäärän merkkimäärä miinus valitun quoten pistemäärän merkkimäärä".
Jos ei välilyöntejä pistemäärien edessä ole riittävästi niin tuloksena voi olla väärä järjestys, sillä kaksi tulee ennen kuutosta, joten sivulle tulostuu näin:

#kanava - pisteitä: 12 ID: 1
<nick> moi!
-----------------
#toinen-kanava - pisteitä: 2 ID: 2
<poi> eksyin
-----------------
#kolmas-kanava - pisteitä: 6 ID: 3
<ahfds> judvsu

tiedostossa ilman välilyöntejä olisi näin: (muodossa pisteet|ID|kanava|quote)

12|1|#kanava|<nick> moi!
2|2|#toinen-kanava|<poi> eksyin
6|3|#kolmas-kanava|<ahdfs> judvsu

kahden viimeisen (id:t 2 ja 3) pistemäärien edessä pitäisi tällöin olla yks välilyönti jotta toimii oikein.
Pitäis olla noi ensimmäiset separaattorit (eli pystyviivat |) joka rivillä samalla kohdalla (niinkuin pilkut alekkain laskemisessa)

Haluaisin joko ilman välilyöntejä oikein järjestävän skriptin/funktion tai välilyönnit lisäävän skriptin. Mahdollista?

Kiitos

leftover [10.09.2003 20:50:46]

#

Taikasana:

https://www.php.net/manual/en/function.rsort.php
https://www.php.net/manual/en/function.sort.php

void rsort ( array array [, int sort_flags])
SORT_NUMERIC - compare items numerically

Ei tartte enää itse pähkäillä onko 12 suurempi kuin 2 :-)

Gwaur [11.09.2003 14:46:39]

#

Ette tajunne. Tätä on erittäin vaikea selittää.
Ongelmana on se kun tiedostossa on ensin 2 pistettä omaava quote ja sen jälkeen tulee 6 pistettä saanut quote. Oikeastihan 2 tulee ennen 6:sta. Olen tehnyt näin:

<?php
$quotet = file("quotet.txt"); //hakee quotet taulukkoon
sort($quotet); //järjestää quotet pisteiden mukaan
?>

ja quotet.txt:ssä on:

12|1|<nick> moi!
2|3|<ahfds> judvsu
6|2|<poi> eksyin

Koska viimeisen quoten (eli se jossa poi sanoo "eksyin") pistemäärä (eli ensimmäinen kohta), eli 6 on suurempi kuin 2, tulee se tulostettua viimeisenä, vaikka sen pitäisi tulla toisena.

sort() tekee pieleen. koska numerot 6, 2, 12 ovat "aakkosjärjestyksessä" 12, 2, 6 järjestää sort() ne "aakkosjärjestykseen". pitäisi olla jokin miten ne saa NUMERO- / SUURUUSJÄRJESTYKSEEN, ei aakkosjärjestykseen!

jos vaikka teen näin:

<?php
$numerot = array(1, 2, 6, 14, 12, 3);
echo "Ennen järjestämistä:<br>";
print_r($numerot); //tulostetaan järjestämätön numero-array
sort($numerot); // järjestetään
echo "<br><br>Järjestämisen jälkeen";
print_r($numerot); //tulostetaan järjestetty numero-array
?>

tulee numerot väärään järjestykseen. toi on täällä: http://mbnet.fi/paauli/prkl.php

Kiitos

EDIT: TÄH? nyt se sitten toimiikin :O kumma juttu kyllä :/

tejeez [11.09.2003 14:51:31]

#

lainaus:

SORT_NUMERIC - compare items numerically

Gwaur [11.09.2003 14:56:14]

#

No täytyypi sitten kokeilla tota
Anteeksi kauhean pitkistä ja vaikeahkosti ymmärrettävistä viesteistä.

Nyt lähden koulusta kotiin->

odys [11.09.2003 16:24:09]

#

saasta se johtuu että kun haet tiedostosta tiedot on muuttujat string tyyppisiä ja tuossa arrayssä minkä määrittelit on numerot ihan integerejä ja sort osaa itse huomioida sen ja järjestää ne numerojärjestykseen eikä aakkosjärjestykseen.

NiLon [17.09.2003 13:15:51]

#

Olisko helpompi ja kätevämpi keino että tekis flatfilet jokaisesta quotesta erikseen? Tai sitten jokin MySQL tietokannan tapainen juttu.

NiKC [17.09.2003 13:31:32]

#

lainaus:

saasta se johtuu että kun haet tiedostosta tiedot on muuttujat string tyyppisiä ja tuossa arrayssä minkä määrittelit on numerot ihan integerejä ja sort osaa itse huomioida sen ja järjestää ne numerojärjestykseen eikä aakkosjärjestykseen.

Php on tyypitön kieli ja käsittelee dataa yhteyden mukaan numerona/stringinä/whatever ilman explisiittiä tyypitystä.


Sivun alkuun

Vastaus

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

Tietoa sivustosta