2

誰でも理由を説明できますか:

    <?php
    for ($i = 'a'; $i <= 'z'; $i++){
    echo "$i ";
    }
    ?>

なぜその出力は:

abcdefghijklmnopqrstu vwxyz 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 dg dh di dj dk dl dm dn do dp dq dr ds dt du dv dw dx dy dze ea ebec ed ee ef eg eh ei ej ek el em en eo ep eqer es et eu ev ew ex... on to yz

しかし、それはうまく動作します

    <?php
    for ($i = 'a'; $i != 'aa'; $i++){
    echo "$i ";
    }
    ?>

「zz」に到達するまで、ループが何度も繰り返されるようです。

私が与える$i<"aa"と正常に動作するはずですが、代わりに「a」のみを出力します。

4

2 に答える 2

5

インクリメント演算子のマニュアルを参照してください:

PHP は、C ではなく文字変数の算術演算を扱うとき、Perl の規則に従います。たとえば、PHP と Perl では $a = 'Z'; $a++; $a を 'AA' に変換しますが、C では a = 'Z'; ++; a を '[' に変換します ('Z' の ASCII 値は 90、'[' の ASCII 値は 91)。文字変数はインクリメントできますが、デクリメントはできません。また、プレーン ASCII 文字 (az および AZ) のみがサポートされていることに注意してください。他の文字変数をインクリメント/デクリメントしても効果はなく、元の文字列は変更されません。

于 2011-12-02T18:17:07.260 に答える
1

$i < "aa"文字列に対して小なり ( ) 演算子を実行することはできません。

数値型に変換され、結果は通常予測できません。

于 2011-12-02T18:21:22.853 に答える