【问题标题】:When to use the Increment Operator on Strings in PHP? [closed]何时在 PHP 中对字符串使用增量运算符? [关闭]
【发布时间】:2013-06-26 09:53:32
【问题描述】:

我是第一次学习 PHP,我很惊讶该语言允许在字符串上使用自增运算符。

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

我能找到的围绕这个主题的教程只介绍了玩具示例。 如果您提及使用此“功能”有益的情况,我们将不胜感激。

提前致谢!

【问题讨论】:

  • 这是一个噱头,而不是功能。所以无法回答语言设计背后的“为什么”,除了它得到了carried over from Perl
  • 我认为它有用的唯一一次是如果将一系列字符串作为条件进行测试。不用为每一个都写一个测试,而是用一个 for 循环来测试每一个。
  • MS Excel 列 ID 从 'A' 到 'Z'、从 'AA' 到 'AZ'、从 'BA' 到 'BZ' 等......匹配此字符递增模式;因此,在使用 Excel 工作表时,字符递增非常有用

标签: php string operators increment decrement


【解决方案1】:

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 或密码

【讨论】:

    【解决方案2】:

    取自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 数字系统表示
    • 计算字符差异
    • 加密

    【讨论】:

      【解决方案3】:

      字符实际上是一个数字。 你应该看看 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'

      【讨论】:

      • 这并不能真正解释翻转。 IE。递增z 得到aa
      • 你完全正确
      【解决方案4】:

      查看http://php.net/manual/en/language.operators.increment.php 上名为“Example #1 Arithmetic Operations on Character Variables”的部分 - 您可以使用增量运算符将字符和序列添加到字符串中。

      【讨论】:

      • 这不是被问到的。
      • 抱歉,我只是希望这能阐明该功能的一些基本用途。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-11
      相关资源
      最近更新 更多