2014-01-26 167 views
0

我面臨着一些問題,以增加字符串的山谷,例如:PHP增加字符串值

$string = "someString_1"; 

我需要價值somestring_2。當然,我可以使用類似this的東西。 但試圖找到另一種方式,結果我發現它將足以使$ string ++在我的情況下;

$string++; 
echo $string; //someString_2 

這真是太棒了,我只有一串代碼。但是: Queston,is this correct way, or is there more better variants?(條件是我的字符串allways將有整數在最後)

而爲什麼它不起作用時,第一個位置的整數。例如,如果我們做:

echo '1string' + '2string'; //導致3這是怎麼用繩子PHP工作的時候,我們希望做出一些mathemetic操作

+0

當你有'$ string =「someString_9」時,這會產生一些問題; $字符串++; echo $ string;' –

+0

http://stackoverflow.com/questions/8885440/increment-behavior-on-strings-php-easter-egg-遞增數字字符串的作品,但不是正確的代碼。 RegEx是更好的解決方案 – mutex36

+0

@Mark Ba​​ker。呃,我只是關於它而已。我應該設置09這種情況得到10,不是好主意( – sergio

回答

2

你可以試試這個正則表達式。這個片斷的作品,它給了我作爲導致someString_2

$string = "someString_1"; 
function increment($matches) { 
    return ++$matches[1]; 
} 

echo $string = preg_replace_callback("|(\d+)|", "increment", $string); 
+0

也許這種反應可以通過使用匿名函數得到改善。我不喜歡創建一個函數,然後調用它從一個地方只有(因爲後來也許我刪除preg_replace_callback()並忘記該功能,然後別人想知道爲什麼增量功能存在)。 – soger

2

有上php.net http://www.php.net/manual/en/language.operators.increment.php

PHP遵循了Perl的約定與算術運算的字符變量,而不是C的交易時的解釋。例如,在PHP和Perl中$ a ='Z'; $ A ++;將$ a變成'AA',而在C a ='Z'中;一個++;將a變成'['('Z'的ASCII值是90,'['的ASCII值是91)。請注意,字符變量可以遞增但不遞減,即使如此,只支持純ASCII字母和數字(a-z,A-Z和0-9)。遞增/遞減其他字符變量不起作用,原始字符串不變。

1

您的解決方案可能有效,但想象一下,有人必須稍後修改您的代碼。如果你在某處看到$string++,你會猜測(沒有任何研究)它做了什麼?即使它起作用,在我看來,創建一個可以滿足你所需要的功能,並且有一個名稱可以清楚表明它的功能。