何时在PHP中使用字符串的递增运算符?

时间:2013-06-28 15:04:48

标签: php string operators increment decrement

我第一次学习PHP,我发现该语言允许在字符串上使用增量运算符,这令人惊讶。

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

我可以在本主题周围找到的教程仅介绍玩具示例。 如果您提到使用此“功能”有益的情况,我将不胜感激。

提前致谢!

4 个答案:

答案 0 :(得分: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或密码

答案 1 :(得分:0)

http://php.net/manual/en/language.operators.increment.php查看名为“对字符变量的示例#1算术运算”的部分 - 您可以使用increment运算符将字符和序列添加到字符串中。

答案 2 :(得分:0)

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

对charachter php文档进行Converst编号 http://php.net/manual/en/function.chr.php

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

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

答案 3 :(得分:0)

the documentation开始,PHP在处理字符变量的算术运算时遵循Perl的约定:

  

例如,在PHP和Perl $ a ='Z'中; $ A ++;将$ a变为'AA',而在C a ='Z';一个++;将a转换为'['('Z'的ASCII值为90,'['的ASCII值为91)。请注意,字符变量可以递增但不递减,即使只支持纯ASCII字符(a-z和A-Z)。递增/递减其他字符变量无效,原始字符串不变。

虽然我个人没有使用过这个功能,但我可以通过遵循Perl的惯例来考虑一些好处,而不是C语言。这是在alpha范围内递增,而不是简单地递增ASCII值。

通过保持在alpha范围内,基本上我们谈论的是基础26 numeral system(使用字母)。就像9增加到10(结转)一样,z增加到aa

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

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

尽管这些种子很可能会在PHP之外进行管理,但它仍然有益于PHP提供原本需要更多代码的内容。

其他用例:

  • Base-26数字系统表示
  • 计算字符差异
  • 加密