Iterace po znacích
Školení, která pořádám
Pokud je potřeba projít všechny znaky abecedy, lze to řešit tradičně:
<?php
for ($i=0; $i < 26; $i++) {
echo chr(ord('A') + $i);
}
?>
V PHP lze však podobně jako v Perlu přímo inkrementovat i samotné znaky:
<?php
for ($ch = 'A'; $ch != 'AA'; $ch++) {
echo $ch;
}
?>
Všimněte si, že podmínka ukončení je $ch != 'AA'
a ne $ch <= 'Z'
, které by se nejspíš nabízelo. Je to proto, že 'Z'
se inkrementuje na 'AA'
, které je při standardním lexikografickém uspořádání menší než 'Z'
.
Diskuse
Juro Hajdúch:
No áno, ale škoda, že to nefunguje aj s diakritikou :o).
Juro Hajdúch:
A sme opäť pri kombinatorike. S tým sa oplatí experimentovať.
<?php
for ($ch = 'AA'; $ch != 'AAA'; $ch++) { // $ch = 'AAA' atď.
echo $ch."<br/>";
}
?>
Nejen inkrementovat, ale i dekrementovat lze (tyhle slova nějak nemám rád, zní to tak ... ehm ... no šak víte).
Jinak se mi líbí, jak to respektuje velikost písmenek. Například 'aZz' + 1 je 'bAa'.
Martin:
Třeba, když chces jít od A do P a nechce se ti počítat, na jakém místě P je :)
Juro Hajdúch:
Alebo pri stránkovani nekonečne dlhých abecedných zoznamov.
finc:
A kam se mi zařadí např. p. Čermáková? :)
Nezkoušel jsem, jestli set_locale pomůže pro českou specifikaci, ale než si hrát, udělám si na to např. pole.
$ch = array();
$ch[0] = "A";
...
adrive:
Nejako zložito nie?
$ch = array('A', 'B'); :D
finc:
No co se týče funkčnosti, tak to je naprosto identické. Co se týče zápisu, zkrácený zápis je dobrý po pole, které má 2-3 položky, ale když má obsahovat více jak 10 položek, je ten zápis matoucí. Tak kdo to pak má složité? :D
adrive:
no veď píšem, kto to má zložité... ja v podstate píšem len hodnoty pola, a nemusím sa obťažovať s indexami a premennými.
finc:
Jenže ty indexy se ti můžou později hodit při orientaci. To je ten důvod, proč to rozepisuji.
Ale není to zásadní rozdíl, když to funguje jak má. :)
3wl4k:
<?php
$pole = array(
0 => 'a',
1 => 'b',
2 => 'c',
3 => 'd',
4 => 'e',
5 => 'f',
6 => 'g',
7 => 'h',
8 => 'i'
);
?>
IMHO je toto najprehladnejsi sposob (nesekol som sa dufam)
Juro Hajdúch:
Ak sa nemýlim, tak pokiaľ nie sú v poli deklarované žiadne kľúče prvkov, tak sa defaultne prvkom poľa prideľujú kľúče od nuly. Teda
<?php $pole = array('a','b','c','d','e'); ?>
je to isté ako píšeš ibaže kratšie a vlastne kľúče typu 0,1,2,3... možno používať aj tak.
finc:
Tento zápis je vhodný ve chvíli, kdy budu potřebovat občas do pole na různé pozice vložit další prvek, určitě bude jednodušší nedefinovat klíč podle posloupnosti. Na druhou stranu myslím, že česká abeceda je neměnná. Proto si toto pole rozepíši, abych na první pohled viděl na kterém místě je ten či onen znak.
vd:
Já byl také přesvědčen o neměnnosti sluneční soustavy a najednou máme 8 planet místo 9. Taky se může stát, že až jednou někoho na*re písmeno "ch" tak budeš přepisovat indexy. ;-)
ps: Nenávidím české pravidla pro řazení, kdopak je zruší? :-)
error414:
co
<?php
var_dump(range('a','x'));
?>
array
0 => 'a' (length=1)
1 => 'b' (length=1)
2 => 'c' (length=1)
3 => 'd' (length=1)
4 => 'e' (length=1)
5 => 'f' (length=1)
6 => 'g' (length=1)
7 => 'h' (length=1)
8 => 'i' (length=1)
9 => 'j' (length=1)
10 => 'k' (length=1)
.........
je to asi nejjednodusi. Asi.
MiSHAK:
Hm dělal bych to taky spíš přes pole... Ale otázka zněla jaký to má sakra smysl?
Michal:
Škoda že tohle nefunguje s UTF-8. Následující kód mi vypíše 5 řádků místo očekávaných tří:
<?php
$str = "Kůň";
for ($i=0; $i<strlen($str); $i++)
printf("%d - %s - %s<br/>", $i, $str{$i}, ord($str{$i}));
?>
Výsledek:
0 - K - 75
1 - - 197
2 - - 175
3 - - 197
4 - - 136
Diskuse je zrušena z důvodu spamu.