2013-02-12 44 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); 
} 
相关问题