Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么赢了';t trim在PHP中用作数组\步或数组\映射的回调?_Php_Trim_Array Map_Array Walk - Fatal编程技术网

为什么赢了';t trim在PHP中用作数组\步或数组\映射的回调?

为什么赢了';t trim在PHP中用作数组\步或数组\映射的回调?,php,trim,array-map,array-walk,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); } 字符串(12)“测试数据”字符串(11)“测试数据” 数组\映射返回一个新数组,请尝试以下操作 $a=array('test_data_1 ','test_

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

$a=array('test_data_1 ','test_data_2');
array_walk($a, 'trim');
array_map('trim', $a);                    
foreach($a AS $b){
    var_dump($b);
}
字符串(12)“测试数据”字符串(11)“测试数据”


数组\映射返回一个新数组,请尝试以下操作

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

首先,array_walk对于您的目的来说是一个错误的函数

其次,array_map不会更改原始数组,而是返回映射的数组。因此,您需要的是:

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

对于要修改数组中的项(值)的
array\u 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);
}
$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);
}
或者,使用
array\u map
必须使用返回值重新分配数组,这样代码将变成:

$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);
}
$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);
}

谢谢,您错过了array_map返回的内容-但是pealse您可以指定为什么将concider array_walk作为错误的函数吗?如果您阅读,您将看到array_walk仅使用数组的每个值(和键)调用一个函数。因此,其效果与:
trim('test_data_1',0)相同;trim('test_data_2',1)
-没有分配,没有副作用(顺便说一下,trim的第二个参数是错误的)。当然,您可以为array_walk编写自己的函数,然后修剪实际的数组元素。