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
Osa selostuksista meni kyllä hieman yli hilserajan, tarkista josko selostukseesi olisi lipsahtanut muutama virhe.
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?
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...
Offtopic...
Kyllä ne varmaan siinä on, mutta kun selaimet html-standardin mukaisesti ignoroi white-spacen.
..ehkä kumminkin etsit funktiota rsort? sort järjestää ne tohon järjestykseen ja rsort päinvastaiseen järjestykseen.
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
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 :-)
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ä :/
lainaus:
SORT_NUMERIC - compare items numerically
No täytyypi sitten kokeilla tota
Anteeksi kauhean pitkistä ja vaikeahkosti ymmärrettävistä viesteistä.
Nyt lähden koulusta kotiin->
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.
Olisko helpompi ja kätevämpi keino että tekis flatfilet jokaisesta quotesta erikseen? Tai sitten jokin MySQL tietokannan tapainen juttu.
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ä.
Aihe on jo aika vanha, joten et voi enää vastata siihen.