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

字符实际上是一个数字。你应该看看 ASCII 表 http://en.wikipedia.org/wiki/ASCII

将数字转换为字符 php 文档 http://php.net/manual/en/function.chr.php

$test = 'a'; 
$test++;
echo($test);

正如您在 ASCII 表中看到的那样,'a' = 97 和 'b' = 98 的数字表示因此显示了 'b'

于 2013-06-28T15:14:26.013 回答
0

取自文档,PHP 在处理字符变量的算术运算时遵循 Perl 的约定:

例如,在 PHP 和 Perl 中 $a = 'Z'; $a++; 将 $a 变成 'AA',而在 C 中 a = 'Z'; 一个++;将 a 转换为 '['('Z' 的 ASCII 值是 90,'[' 的 ASCII 值是 91)。请注意,字符变量可以递增但不能递减,即使如此,也仅支持纯 ASCII 字符(az 和 AZ)。增加/减少其他字符变量没有效果,原字符串不变。

虽然我个人没有使用过这个特性,但我可以通过遵循 Perl 的约定(而不是 C 的约定)想到一些好处。这是在 alpha 范围内递增,而不是简单地递增 ASCII 值。

通过保持在 alpha 范围内,基本上我们在谈论一个以 26 为基数的数字系统(使用字母)。因此,就像9递增到10(结转)一样,z递增到aa.

立即想到的是字符哈希序列。

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

虽然这些种子很可能会在 PHP 之外进行管理,但 PHP 本身提供了原本需要更多代码的东西,这仍然是有益的。

其他用例:

  • Base-26 数字系统表示
  • 计算字符差异
  • 加密
于 2013-06-28T15:15:11.593 回答