为什么不修剪PHP中的array_walk或array_map的回调?

时间:2013-02-12 08:55:30

标签: php trim array-map array-walk

为什么我的示例代码会导致第一个字符串仍然有尾随空格?

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

string(12)“test_data_1”string(11)“test_data_2”

3 个答案:

答案 0 :(得分:46)

首先,array_walk根本不是你的目的。

其次,array_map不会更改原始数组,但会返回映射的数组。所以你需要的是:

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

答案 1 :(得分: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);
}

答案 2 :(得分: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);
}