2017-03-03 29 views
2

我試圖在PHP中使用array_map來使用str_pad。但它似乎不起作用。一個代碼片段:如何在PHP中使用使用array_map的str_pad?

$arr = ["", "a", "ab", "abc", "abcd"]; 
$arr = array_map("str_pad", $arr, [4, "0", STR_PAD_LEFT]); 
var_dump($arr); 

結果是:

array(5) { 
    [0]=> 
    string(4) " " 
    [1]=> 
    string(1) "a" 
    [2]=> 
    string(2) "ab" 
    [3]=> 
    string(3) "abc" 
    [4]=> 
    string(4) "abcd" 
} 

我無法解釋自己的這種行爲..這$arr[0]被填滿,而只是用空格代替零和其他元素一樣之前。

如何適應我的代碼,所以這是回報這樣的:

array(5) { 
    [0]=> 
    string(4) "0000" 
    [1]=> 
    string(4) "000a" 
    [2]=> 
    string(4) "00ab" 
    [3]=> 
    string(4) "0abc" 
    [4]=> 
    string(4) "abcd" 
} 
+0

我已經在之前回答過類似的問題:http://stackoverflow.com/questions/41286693/php-array-map-trim-parameters/41286762#41286762 –

+0

回調函數爲每個傳遞的數組中的每個元素運行在論據中。它會將''''與'4',''''與'0'和''ab''與'STR_PAD_LEFT'匹配。我很確定那不是你想要的。 – apokryfos

回答

1

在這裏你去(working demo

$arr = ["", "a", "ab", "abc", "abcd"]; 
$arr = array_map(function ($item) { 
     return str_pad($item, 4, "0", \STR_PAD_LEFT); 
    }, 
    $arr 
); 
var_dump($arr); 

您可以在手冊中一看就如何更多詳情array_map()工程。基本上,如果你用多個數組調用它,在第一次調用時,函數的第一個參數將是第一個數組的第一個元素,第二個參數將是第二個數組的第一個元素,依此類推。