15

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

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

字符串(12)“test_data_1”字符串(11)“test_data_2”

4

3 回答 3

53

首先, array_walk 对您的目的来说是错误的函数。

其次,array_map 不改变原始数组,而是返回映射后的数组。所以你需要的是:

$a = array_map('trim', $a);
于 2013-02-12T08:59:03.787 回答
4

array_walk修改数组中的项目(值),回调必须是一个函数,该函数通过引用获取其第一个参数并对其进行修改(这不是 plain 的情况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);
}
于 2016-06-24T08:53:22.630 回答
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);
}
于 2013-02-12T08:58:41.697 回答