5

私は初めて PHP を学んでいますが、この言語で文字列に対してインクリメント演算子を使用できることに驚きました。

     $foo = 'xyZ';
     print ++$foo; // prints xzA

このトピックに関するチュートリアルでは、おもちゃの例のみを紹介しています。 この「機能」を使用すると有益な状況について言及していただければ幸いです。

前もって感謝します!

4

4 に答える 4

4

I would be grateful if you mention a situation where using this 'feature' is beneficial.

これは非常に便利な機能になる可能性があります...

$guess = "21661093e56e24cd60b10092005c4ac7";
$next = "aaaa";
$count = 0;
while(md5($next) !== $guess) {
    $next ++;
    $count ++;
}
printf("Found `%s` after %s loops", $next, number_format($count));

出力

Found `baba` after 17,602 loops

とにかく、PINやパスワードをすぐに解読するつもりはありません

于 2013-06-28T15:22:16.873 に答える
0

http://php.net/manual/en/language.operators.increment.phpの「Example #1 Arithmetic Operations on Character Variables」という名前のセクションを見てください- インクリメント演算子を使用して、文字とシーケンスを追加できます文字列。

于 2013-06-28T15:08:49.233 に答える
0

ドキュメントから取得したPHP は、文字変数の算術演算を処理するときに Perl の規則に従います。

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

私は個人的にこの機能を使用したことはありませんが、C ではなく Perl の規則に従うことで、いくつかの利点が考えられます。これは、単に ASCII 値をインクリメントするのではなく、アルファ範囲内でインクリメントしています。

アルファ範囲内にとどまることで、基本的には 26進法の数字システム(文字を使用) について話していることになります。したがって、 (繰り越し) に9インクリメントするのと同じように、 にインクリメントします。10zaa

すぐに思いつくのは、文字ハッシュ シーケンスです。

public static function nextSeed() {
   // $seed = abc
   return strtolower(++self::$seed);
   // $seed = abd
}

そのようなシードは PHP の外部で管理される可能性がありますが、PHP がネイティブに提供することは有益であり、それ以外の場合はより多くのコードが必要になります。

その他の使用例:

  • 基数 26 の数値システム表現
  • 文字の違いの計算
  • 暗号化
于 2013-06-28T15:15:11.593 に答える