2013-02-18 46 views
2

試圖用一個簡單的「版本」系統對於一些散列,我請執行下列操作:在PHP總結字符串轉換爲整數

$last_version = '009'; 
$increment = '001'; 

$result = $last_version + $increment; 

var_dump($result); 

我希望:string(010)但我得到int(10)之前,我跳進ifstr-pad,我想知道是否有其他方式來保存所需的格式?

+1

你需要將它轉換爲字符串後。 – 2013-02-18 17:59:55

+0

爲什麼不只是存儲一個int然後將其格式化爲輸出? $ version = 1; $ ++版本;回聲sprintf('%03d',$版本)'?至於你的str/int,你迫使PHP將這些字符串轉換爲整數,因爲你使用的是+,這是加法。 – 2013-02-18 18:02:20

+0

沒有理由期望字符串(010)。如果你想合併字符串,你會得到「009001」,否則,如果你想添加他們的數值,你會使用整數。從一個人轉到另一個人很容易,但只是試圖瞭解其中的差異,否則你可能會在未來尋找一些小事而不是尋找小時。 – 2013-02-18 18:04:44

回答

3

使用+自動轉換變量到適當number類型(在這種情況下爲int,然而不同的字符串格式可以澆鑄float)。

如果要保持期望的0左填充,可以使用sprintf()格式化結果,因爲這樣的:

$result = sprintf('%03d', $last_version + $increment); 

格式說明%03d指定要的整數串(d)長度爲3,左側填充字符0

關於PHP的類型戲法邏輯的詳細信息可以在PHP Documentation: Type Juggling

+0

偉大的...它做了這項工作,我不必結束使用'str_pad' – Alex 2013-02-18 18:05:33

+0

@ w0rldart就像一邊......爲什麼厭惡'str_pad'? 'sprintf'在這裏做着完全相同的事情。 – 2013-02-18 18:11:09

+0

是的,它確實......它只是我想看看是否有其他替代方案 – Alex 2013-02-19 09:20:06

1
$last_version = '009'; 
$increment = '001'; 

$result = $last_version + $increment; 

$result = (string) $result ; 

var_dump($result) ; 

當您嘗試使用字符串執行數學運算時,它們將轉換爲approprite類型。在這種情況下int。但是你可以在上面的例子中將整數轉換回字符串。

+0

甚至在問題出現之前,我得到了相同的輸出結果:\ – Alex 2013-02-18 18:02:12

+0

編輯到'$ result =(string)$ result;'現在應該可以工作。 – vikingmaster 2013-02-18 18:03:05

+1

最後,'$ result'是'string(2)「10」',而不是'string(3)「010」' – 2013-02-18 18:03:40

1

找到您不能添加字符串(它是那樣簡單)。這就是爲什麼PHP將這兩個字符串隱式轉換爲整數(這稱爲dynamic typing)。

要格式化你的號碼,你可以到以下幾點:

$last_version = '009'; 
$increment = '001'; 

$result = $last_version + $increment; // = 10 
$result = sprintf("%03d", $result) // = "010" 
1

當您使用+,PHP會自動轉換字符串爲整數,因此int(10結果你看到。您將無法以這種方式添加字符串。所以你最好的做法是保持版本爲整數和字符串像這樣:

$last_version = 9; 
$increment = 1; 
$pad_length = 3; 
$pad_string = '0'; 

$result = $last_version + increment; // or simply $last_version++; if increment will always be 1 

$string_result = str_pad((string)$result, $pad_length, $pad_string, STR_PAD_LEFT); 
+0

我已經結束了與此類似的代碼,但正如我所問...我正在尋找一種避免'str_pad'和更多代碼行的方法。 – Alex 2013-02-18 18:06:53

+0

@ w0rldart在其他答案中指出,你可以確定使用'sprintf()',但這實際上沒有什麼不同。這裏關鍵的一點是,在PHP中,字符串不能像這樣添加。數學必須用整數和後面設置的字符串格式完成。 – 2013-02-18 18:09:12