我正在尝试比较这三个,但似乎只有array_map
有效。
$input = array( ' hello ','whsdf ',' lve you',' ');
$input2 = array( ' hello ','whsdf ',' lve you',' ');
$input3 = array( ' hello ','whsdf ',' lve you',' ');
$time_start = microtime(true);
$input = array_map('trim',$input);
$time_end = microtime(true);
$time = $time_end - $time_start;
echo "Did array_map in $time seconds<br>";
foreach($input as $in){
echo "'$in': ".strlen($in)."<br>";
}
////////////////////////////////////////////////
$time_start = microtime(true);
array_walk($input2,'trim');
$time_end = microtime(true);
$time = $time_end - $time_start;
echo "Did array_walk in $time seconds<br>";
foreach($input2 as $in){
echo "'$in': ".strlen($in)."<br>";
}
////////////////////////////////////////////////
$time_start = microtime(true);
foreach($input3 as $in){
$in = trim($in);
}
$time_end = microtime(true);
$time = $time_end - $time_start;
echo "Did foreach in $time seconds<br>";
foreach($input3 as $in){
echo "'$in': ".strlen($in)."<br>";
}
我做错了什么?这是输出:
Did array_map in 0.00018000602722168 seconds
'hello': 5
'whsdf': 5
'lve you': 7
'': 0
Did array_walk in 0.00014209747314453 seconds
' hello ': 10
'whsdf ': 41
' lve you': 37
' ': 30
Did foreach in 0.00012993812561035 seconds
' hello ': 10
'whsdf ': 41
' lve you': 37
' ': 30
array_walk
和foreach
循环没有修剪。
答案 0 :(得分:18)
array_walk
不会查看结果函数给出的内容。相反,它传递回调对项目值的引用。所以你需要的代码是
function walk_trim(&$value) {
$value = trim($value);
}
foreach
也不会存储更改的值。将其更改为
foreach ($input3 as &$in) {
$in = trim($in);
}
答案 1 :(得分:4)
从 PHP 5.3 可以使用匿名函数。 例如:
$arr = array('1<br/>','<a href="#">2</a>','<p>3</p>','<span>4</span>','<div>5</div>');
array_walk($arr, function(&$arg){
$arg = strip_tags($arg);
});
var_dump($arr); // 1,2,3,4,5 ;-)
玩得开心。