在PHP中何时对字符串使用增量运算符?

在PHP中何时对字符串使用增量运算符?,php,string,operators,increment,decrement,Php,String,Operators,Increment,Decrement,我是第一次学习PHP,我发现这门语言允许在字符串上使用增量运算符,这让我感到惊讶 $foo = 'xyZ'; print ++$foo; // prints xzA 我能找到的关于这个主题的教程只介绍玩具的例子。 如果您提到使用此“功能”有益的情况,我将不胜感激。 提前谢谢 请查看“字符变量的算术运算”部分-您可以使用递增运算符向字符串中添加字符和序列。字符实际上是一个数字。 您应该看看ASCII表 将数字转换为charachter php文档 正如您在ASCII表格中

我是第一次学习PHP,我发现这门语言允许在字符串上使用增量运算符,这让我感到惊讶

     $foo = 'xyZ';
     print ++$foo; // prints xzA
我能找到的关于这个主题的教程只介绍玩具的例子。 如果您提到使用此“功能”有益的情况,我将不胜感激。


提前谢谢

请查看“字符变量的算术运算”部分-您可以使用递增运算符向字符串中添加字符和序列。

字符实际上是一个数字。 您应该看看ASCII表

将数字转换为charachter php文档

正如您在ASCII表格中所看到的,“a”的数字表示为97,“b”的数字表示为98 因此显示“b”

取自,PHP在处理字符变量的算术运算时遵循Perl的惯例:

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

虽然我个人没有使用过这个特性,但我可以想到遵循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数字系统表示法
  • 计算字符差异
  • 加密

如果您提到使用此“功能”有益的情况,我将不胜感激。

这可能是一个非常有用的功能

示例

$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码或密码。这不是我们要问的问题。我很抱歉,我只是希望这能让我们了解该功能的一些基本用途。这是一个噱头,不是一个功能。因此无法回答“为什么”在语言设计背后,除了我认为它唯一有用的时候是将一系列字符串作为条件进行测试。不是为每个字符串编写测试,而是使用for循环来测试每个字符串。MS Excel列ID增量“a”到“Z”,“AA”到“AZ”,“BA”到“BZ”,等等……匹配此字符acter递增模式;因此字符递增在使用Excel工作表时非常有用。这并不能真正解释滚动。即递增
z
会产生
aa
。你完全正确
Found `baba` after 17,602 loops