Iterace po znacích

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'.

Jakub Vrána, Výuka, 29.9.2006, on-line

Diskuse

Juro Hajdúch:

No áno, ale škoda, že to nefunguje aj s diakritikou :o).
29.9.2006 12:54:49

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/>";
}
?>

29.9.2006 12:59:52

ikona dgx:

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'.

29.9.2006 13:02:28

ikona MiSHAK:

Jaký to má smysl? (upřesnit)
2.10.2006 07:48:41

Martin:

Třeba, když chces jít od A do P a nechce se ti počítat, na jakém místě P je :)
3.10.2006 00:54:58

Juro Hajdúch:

Alebo pri stránkovani nekonečne dlhých abecedných zoznamov.
3.10.2006 15:33:26

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";
...
3.10.2006 16:23:53

adrive:

Nejako zložito nie?
$ch = array('A', 'B'); :D
3.10.2006 18:52:18

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
4.10.2006 03:48:50

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.
4.10.2006 17:29:52

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á. :)
5.10.2006 00:37:41

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)
5.10.2006 21:44:34

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.
5.10.2006 22:55:57

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.
6.10.2006 12:50:29

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ší? :-)
6.10.2006 15:57:31

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.
2.1.2007 13:26:12

ikona MiSHAK:

Hm dělal bych to taky spíš přes pole... Ale otázka zněla jaký to má sakra smysl?
9.10.2006 11:02:51

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
7.10.2006 16:06:46

ikona Jakub Vrána:

Lze použít funkce iconv_strlen a iconv_substr. Jak zjistit kód znaku jinak než ručně (opak funkce chr_utf8 z http://php.vrana.cz/html_entity_decode-s-utf-8-v-php-4.php) mě nenapadá.
7.10.2006 16:36:29
avatar © 2005-2024 Jakub Vrána. Publikované texty můžete přetiskovat pouze se svolením autora. Ukázky kódu smíte používat s uvedením autora a URL tohoto webu bez dalších omezení Creative Commons. Můžeme si tykat. Skripty předpokládají nastavení: magic_quotes_gpc=Off, magic_quotes_runtime=Off, error_reporting=E_ALL & ~E_NOTICE a očekávají předchozí zavolání mysql_set_charset. Skripty by měly být funkční v PHP >= 4.3 a PHP >= 5.0.