Heute inkrementieren wir mal Strings.
$string = 'Iteration number 0'; $i = 10; while ($i--) echo $string++ . "<br />";
Output:
Iteration number 0 Iteration number 1 Iteration number 2 Iteration number 3 Iteration number 4 Iteration number 5 Iteration number 6 Iteration number 7 Iteration number 8 Iteration number 9
Das war ja schonmal ganz nett zum warmwerden. Aber jetzt: fasten your seatbelts.
for ($i = 'a'; $i <= 'z'; $i++) { echo $i . " "; }
Output:
a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax ay az ba bb bc bd be bf bg bh bi bj bk bl bm bn bo bp bq br bs bt bu bv bw bx by bz ca cb cc cd ce cf cg ch ci cj ck cl cm cn co cp cq cr cs ct cu cv cw cx cy cz da db dc dd de df dg dh di dj dk dl dm dn do dp dq dr ds dt du dv dw dx dy dz ea eb ec ed ee ef eg eh ei ej ek el em en eo ep eq er es et eu ev ew ex ey ez fa fb fc fd fe ff fg fh fi fj fk fl fm fn fo fp fq fr fs ft fu fv fw fx fy fz ga gb gc gd ge gf gg gh gi gj gk gl gm gn go gp gq gr gs gt gu gv gw gx gy gz ha hb hc hd he hf hg hh hi hj hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii ij ik il im in io ip iq ir is it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm jn jo jp jq jr js jt ju jv jw jx jy jz ka kb kc kd ke kf kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la lb lc ld le lf lg lh li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma mb mc md me mf mg mh mi mj mk ml mm mn mo mp mq mr ms mt mu mv mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op oq or os ot ou ov ow ox oy oz pa pb pc pd pe pf pg ph pi pj pk pl pm pn po pp pq pr ps pt pu pv pw px py pz qa qb qc qd qe qf qg qh qi qj qk ql qm qn qo qp qq qr qs qt qu qv qw qx qy qz ra rb rc rd re rf rg rh ri rj rk rl rm rn ro rp rq rr rs rt ru rv rw rx ry rz sa sb sc sd se sf sg sh si sj sk sl sm sn so sp sq sr ss st su sv sw sx sy sz ta tb tc td te tf tg th ti tj tk tl tm tn to tp tq tr ts tt tu tv tw tx ty tz ua ub uc ud ue uf ug uh ui uj uk ul um un uo up uq ur us ut uu uv uw ux uy uz va vb vc vd ve vf vg vh vi vj vk vl vm vn vo vp vq vr vs vt vu vv vw vx vy vz wa wb wc wd we wf wg wh wi wj wk wl wm wn wo wp wq wr ws wt wu wv ww wx wy wz xa xb xc xd xe xf xg xh xi xj xk xl xm xn xo xp xq xr xs xt xu xv xw xx xy xz ya yb yc yd ye yf yg yh yi yj yk yl ym yn yo yp yq yr ys yt yu yv yw yx yy yz
Wow! Und allemal cooler als der hier:
for ($i = ord('a'); $i <= ord('z'); $i++) { echo chr($i) . " "; }
Output:
a b c d e f g h i j k l m n o p q r s t u v w x y z
Wem langweilig ist, kann damit gern ein bisschen rumspielen (ASCII-Tabelle gefällig?). Siehe dazu auch den Manual-Eintrag bei php.net:
PHP follows Perl’s convention when dealing with arithmetic operations on character variables and not C’s. For example, in Perl ‚Z’+1 turns into ‚AA‘, while in C ‚Z’+1 turns into ‚[‚ ( ord(‚Z‘) == 90, ord(‚[‚) == 91 ). Note that character variables can be incremented but not decremented and even so only plain ASCII characters (a-z and A-Z) are supported.
Ach ja, auch wenns überhaupt nicht zum Thema passt: Wusstet ihr, dass man für den Ungleich-Operator != auch im Visual Basic-Style <> schreiben kann?
var_dump("123" <> 123); //bool(false)
Was mich gerade irritiert ist dass deine zweite Schleife bis ‚yz‘ läuft. Das heißt ja, dass ‚z‘ + 1 == ‚aa‘ aber ‚aa‘ < ‚z‘ (und ‚z‘ < ‚za‘). Zeigt wieder einmal dass Rechenoperationen in PHP nicht die üblichen Eigenschaften haben und man höllisch aufpassen muss, wie überall beim Type Juggling.
Ok, (‚z‘ + 1) ist natürlich immer noch 1, da ‚z‘ nach integer gecasted wird, das ganze geht nur mit dem ++ Operator, gerade getestet.
Auch wenn es irgendwie ein cooles Feature ist, ich glaube ich werde das weiterhin nicht einsetzen, bei diesen Fallstricken.
Kann es sein, dass die Bilder hier nicht gehen?
Hm, bei mir is alles ok. Cache-Problem?