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