2013-06-28 27 views
5

我正在第一次學習PHP,並且我發現這個語言允許在字符串上使用增量運算符,這令人驚訝。何時使用PHP中的字符串增量運算符?

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

我可以在這個主題中找到的教程只介紹玩具的例子。 如果您提到使用此「功能」是有益的情況,我將不勝感激。

在此先感謝!

+1

這是一個噱頭,而不是一個功能破解任何PIN或密碼隨時隨地。所以,SO不能回答語言設計背後的「爲什麼」,只是它得到了[從Perl繼承](http://stackoverflow.com/questions/6458068/increment-and-decrement-strings-in-perl) – mario

+2

只有當我認爲它有用時,如果一系列字符串被作爲條件測試。不要爲每個測試編寫測試,而是使用for循環來測試每個測試。 – asimes

+0

MS Excel列ID通過'Z','AA'到'AZ','BA'到'BZ'等遞增'A'...匹配這個字符遞增模式;因此在使用Excel工作表時,字符遞增非常有用 –

回答

3

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 

我不打算很快反正

0

http://php.net/manual/en/language.operators.increment.php中查看名爲「字符變量的示例1算術運算」的部分 - 您可以使用增量運算符向字符串添加字符和序列。

+1

這不是問什麼問題。 –

+0

我的歉意,我只是希望這可以揭示該功能的一些基本用途。 –

0

charachter實際上是一個數字。 你應該看看,以ASCII表 http://en.wikipedia.org/wiki/ASCII

逆定理數charachter PHP文件 http://php.net/manual/en/function.chr.php

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

正如你可以在ASCII表中看到的「A」 = 97和數字表示'b'= 98 爲此'b'被顯示

+2

這並不能解釋翻滾。即遞增'z'給出'aa'。 – Jim

+0

你是完全正確的 –

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範圍內,基本上我們正在談論一個基地(使用字母)。因此,如9遞增到10(結轉),z遞增到aa

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

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

雖然這樣可能會種子PHP之外進行管理,但卻是有益的PHP提供原生什麼,否則可能需要更多的代碼。

其他使用案例:

  • BASE-26數字系統表示
  • 計算性格差異
  • 加密