試圖用一個簡單的「版本」系統對於一些散列,我請執行下列操作:在PHP總結字符串轉換爲整數
$last_version = '009';
$increment = '001';
$result = $last_version + $increment;
var_dump($result);
我希望:string(010)
但我得到int(10)
之前,我跳進if
和str-pad
,我想知道是否有其他方式來保存所需的格式?
試圖用一個簡單的「版本」系統對於一些散列,我請執行下列操作:在PHP總結字符串轉換爲整數
$last_version = '009';
$increment = '001';
$result = $last_version + $increment;
var_dump($result);
我希望:string(010)
但我得到int(10)
之前,我跳進if
和str-pad
,我想知道是否有其他方式來保存所需的格式?
使用+
自動轉換變量到適當number
類型(在這種情況下爲int
,然而不同的字符串格式可以澆鑄float
)。
如果要保持期望的0左填充,可以使用sprintf()
格式化結果,因爲這樣的:
$result = sprintf('%03d', $last_version + $increment);
格式說明%03d
指定要的整數串(d
)長度爲3
,左側填充字符0
。
關於PHP的類型戲法邏輯的詳細信息可以在PHP Documentation: Type Juggling
$last_version = '009';
$increment = '001';
$result = $last_version + $increment;
$result = (string) $result ;
var_dump($result) ;
當您嘗試使用字符串執行數學運算時,它們將轉換爲approprite類型。在這種情況下int。但是你可以在上面的例子中將整數轉換回字符串。
甚至在問題出現之前,我得到了相同的輸出結果:\ – Alex 2013-02-18 18:02:12
編輯到'$ result =(string)$ result;'現在應該可以工作。 – vikingmaster 2013-02-18 18:03:05
最後,'$ result'是'string(2)「10」',而不是'string(3)「010」' – 2013-02-18 18:03:40
找到您不能添加字符串(它是那樣簡單)。這就是爲什麼PHP將這兩個字符串隱式轉換爲整數(這稱爲dynamic typing)。
要格式化你的號碼,你可以到以下幾點:
$last_version = '009';
$increment = '001';
$result = $last_version + $increment; // = 10
$result = sprintf("%03d", $result) // = "010"
當您使用+
,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);
我已經結束了與此類似的代碼,但正如我所問...我正在尋找一種避免'str_pad'和更多代碼行的方法。 – Alex 2013-02-18 18:06:53
@ w0rldart在其他答案中指出,你可以確定使用'sprintf()',但這實際上沒有什麼不同。這裏關鍵的一點是,在PHP中,字符串不能像這樣添加。數學必須用整數和後面設置的字符串格式完成。 – 2013-02-18 18:09:12
你需要將它轉換爲字符串後。 – 2013-02-18 17:59:55
爲什麼不只是存儲一個int然後將其格式化爲輸出? $ version = 1; $ ++版本;回聲sprintf('%03d',$版本)'?至於你的str/int,你迫使PHP將這些字符串轉換爲整數,因爲你使用的是+,這是加法。 – 2013-02-18 18:02:20
沒有理由期望字符串(010)。如果你想合併字符串,你會得到「009001」,否則,如果你想添加他們的數值,你會使用整數。從一個人轉到另一個人很容易,但只是試圖瞭解其中的差異,否則你可能會在未來尋找一些小事而不是尋找小時。 – 2013-02-18 18:04:44