天天看點

PHP 字元串填充str_pad函數有什麼文檔上沒寫需要注意的呢

str_pad — 使用另一個字元串填充字元串為指定長度

PHP 字元串填充str_pad函數有什麼文檔上沒寫需要注意的呢

該函數傳回 input 被從左端、右端或者同時兩端被填充到制定長度後的結果。

如果可選的 pad_string 參數沒有被指定,input 将被空格字元填充,否則它将被 pad_string 填充到指定長度。

可選的 pad_type 參數的可能值為 STR_PAD_RIGHT,STR_PAD_LEFT 或 STR_PAD_BOTH。如果沒有指定 pad_type,則假定它是 STR_PAD_RIGHT。

以上是文檔上的說明。

那麼對于以下這些情況,内部怎麼處理,會得到什麼樣的結果呢?

1、input長度比pad_length長度大

2、pad_length給負數的時候,給0的時候呢

3、pad_string給空字元串的時候呢

4、可以填充的最大長度是什麼,有沒有限制

5、兩邊填充,給定pad_length,左邊填充多少,右邊填充多少

這些答案都在源碼當中。

PHP 字元串填充str_pad函數有什麼文檔上沒寫需要注意的呢

可以看到,如果pad_length<0 或小于原字元串的時候(包括pad_length=0),都傳回原字元串。

當填充字元串為空字元串的時候,會觸發警告資訊,傳回NULL

好了,前3個問題都找到答案了。來看後面幾個問題

PHP 字元串填充str_pad函數有什麼文檔上沒寫需要注意的呢

填充長度(pad_length - str_len(input) )最大取值是INT_MAX,是以pad_length可以傳一個不大于 INT_MAX+ste_len(input)的值。

PHP 字元串填充str_pad函數有什麼文檔上沒寫需要注意的呢

當兩邊填充的時候,先填充左邊,再填充右邊。當num_pad_chars為奇數的時候,左邊會比右邊少一個(整除運算)

是以,對于str_pad,處理知道預設以空字元填充,預設填充右邊之外,還有以下内容:

1、input長度比pad_length長度大,或者pad_length<0的時候傳回原字元串

2、pad_length最大長度=INT_MAX+str_len(input)

3、pad_string 不能傳入空字元串,否則觸發警告,傳回NULL

4、兩邊填充的時候,先填充左邊,再填充右邊。實際填充長度為奇數的時候,左邊填充長度會比右邊少一個字元。