2013-02-12 41 views

回答

36

首先,array_walk是錯誤的功能爲你的目的。

其次,array_map不會更改原始數組,但會返回映射數組。所以你需要的是:

$a = array_map('trim', $a); 
+1

謝謝,確實錯過了array_map返回的內容 - 但pealse能指定爲什麼要將array_walk作爲錯誤函數進行排列? – 2013-02-12 09:08:05

+8

如果你閱讀[manual](http://php.net/array-walk),你會看到array_walk只是**調用一個數組的每個值(和鍵)的函數。所以它會有同樣的效果:'trim('test_data_1',0); trim('test_data_2',1)' - 沒有分配,沒有副作用(順便說一句,修剪的第二個參數是錯誤的)。你*當然可以爲array_walk編寫自己的函數,然後修剪實際的數組元素。 – 2013-02-12 09:12:16

0

array_map返回一個新的數組,試試這個

$a=array('test_data_1 ','test_data_2'); 
array_walk($a, 'trim'); 
$a = array_map('trim', $a); 
foreach($a AS $b){ 
    var_dump($b); 
} 
0

trim()是很好的準備數據之前檢查或插入它。不過,您可能想要準備的不僅僅是修剪。一個很酷的技術,我以前見過是「管」通過你的準備功能:

$data = prepare($data, array(
    'first_name' => 'trim|custom_function', 
    'surname' => 'trim', 
)); 

做這種方式的優點使得代碼易於閱讀,它是非常容易,在每個特定的數組元素的運行功能。

下面是我很快敲了一個功能:

function prepare($data, $arr){ 
    foreach($arr as $input_name => $functions){ 
    foreach(explode('|', $functions) as $function){ 
     $data[$input_name] = call_user_func($function, $data[$input_name]); 
    } 
    } 
    return $data; 
} 
+4

嘿,很抱歉,但你的回答似乎與上述問題 – 2015-06-03 17:47:12

+0

@JaakKütt沒有關係,但是修整數組值是爲了準備數據。有時候有助於爲開發人員瞄準的目標提供更靈活的方法。 – rybo111 2015-06-03 22:54:35

3

對於array_walk修改數組中的項(值),回調必須是一個函數,通過引用將其第一個參數,並修改它(這不是普通的trim的情況下),因此您的代碼將成爲:

$a=array('test_data_1 ','test_data_2'); 
array_walk($a, function (&$value) { $value = trim($value); }); // by-reference modification 
// (no array_map) 
foreach($a AS $b){ 
    var_dump($b); 
} 

或者,array_map你必須重新分配與返回值的陣列,因此您的代碼將成爲:

$a=array('test_data_1 ','test_data_2'); 
// (no array_walk) 
$a = array_map('trim', $a); // array reassignment 
foreach($a AS $b){ 
    var_dump($b); 
} 
相關問題