PHP- cyklus for s retazcom

Programovacie jazyky, rady, poradňa...
"J"
Medium Professional
Medium Professional
Používateľov profilový obrázok
Príspevky: 1019
Registrovaný: 13 mar 2007, 17:10

PHP- cyklus for s retazcom

Príspevok od používateľa "J" »

Kamarat potreboval vypisat zoznam vsetkych dvojpismenkovych ceskych domen. Nebol problem, za minutu som to mal pomocou cyklu for. Musel som to vsak vyriesit nasledovne:

Kód: Vybrať všetko

<?php
for ($domena='aa'; $domena<='zy'; $domena++)
  echo $domena.'.cz<br />';
  echo 'zz.cz';
?>
Pretoze akonahle som to zmenil na ...

Kód: Vybrať všetko

<?php
for ($domena='aa'; $domena<='zz'; $domena++)
  echo $domena.'.cz<br />';
?>
... mi vypisalo najprv vsetky dvojpismenkove (od aa.cz po zz.cz) a nasledne este vypisalo trojpismenkove - od aaa.cz po zyz.cz.
Podobna vec sa stane napriklad pri

Kód: Vybrať všetko

<?php
for ($i='a'; $i<='z'; $i++)
  echo $i.'<br />';
?>
Vypise pismena od a po z a potom este od aa po yz.

Vedel by mi niekto vysvetlit toto zvlastne chovanie sa phpcka?

WampServer, Apache/2.2.6 (Win32) PHP/5.2.5
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Porovnávanie reťazcov funguje inak ako porovnávanie čísel. Keď je reťazec 'zz' po pripočítaní vznikne 'aaa'. Keď sa nad tým zamyslíš, tak aaa by si v slovníku dal (ďaleko) pred 'zz' (takže 'aaa' je menšie ako 'zz').

// chrono: Napr. v Linuxe sa dá nastaviť, ako sa má triedenie reťazcov správať. Ak napr. nastavíš locale na C, tak to bude fungovať presne tak, ako očakávaš. Ak je nastavené locale napr. na sk_SK, tak to bude fungovať tak, ako ti to teraz funguje (v niektorých locale to môže fungovať úplne inak; napr. tam môže byť postupnosť aAbBcC...).
"J"
Medium Professional
Medium Professional
Používateľov profilový obrázok
Príspevky: 1019
Registrovaný: 13 mar 2007, 17:10

Príspevok od používateľa "J" »

Hm, no zaujimave. A dalo by sa to na WinXP nejak vyriesit, alebo sa musim uspokojit s tymto?
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Ak to generuje to čo chceš, môžeš napr. skončiť, keď bude reťazec dlhší ako 2 znaky (každopádne pripočítavťať k písmenám môže spôsobovať rôzne problémy v závislosti od locale).
"J"
Medium Professional
Medium Professional
Používateľov profilový obrázok
Príspevky: 1019
Registrovaný: 13 mar 2007, 17:10

Príspevok od používateľa "J" »

Vdaka chrono.
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

prípadne dať do podmienky namiesto zz to aaa
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Aj to by mohlo pomôcť (ale zase záleží od locale).
"J"
Medium Professional
Medium Professional
Používateľov profilový obrázok
Príspevky: 1019
Registrovaný: 13 mar 2007, 17:10

Príspevok od používateľa "J" »

Myslis takto?

Kód: Vybrať všetko

<?php
for ($i='aa'; $i<='aaa'; $i++)
  echo $i.'<br />';
?>
Toto nefunguje, vypisuje len aa.
Takisto ak miesto <= v podmienke dam len < :)

//ok, myslim ze vyriesene, temu mozete zamknut.
Napísať odpoveď