这两个函数有个共同点就是可以简化我们的代码,有些简单的foreach循环替换功能,完全可以用这两个函数来实现。
区别
1、array_map的用法是array_map(函数名,数组),而array_walk的用法是array_walk(数组,函数名);
2、array_map里面的函数可以是自定义函数,也可以是php自带的函数,比如trim去除空格等。而array_walk里面的函数只能是自定义的函数
3、array_map不可以改变原函数的值,会获取到新的数组。array_walk是可以改变原函数的值的(加个引用)。array_walk传入数组的key不能被修改!
4、array_map必须要有返回值,因为要填充数组。而array_walk可以没有返回值,输出的话要在调用的函数中通过echo来输出。
5、array_map可以传多个数组作为函数参数,array_walk可以额外传一个参数作为回调函数第三个参数,该参数不是必须为数组的
6、array_walk的第一个参数数组的key和value作为第二个参数函数的前两个参数,第一个参数为value,第二个为key
7、array_map使用的回调函数只能获取到数组的元素
array_map:
<?php
function myfunction($v)
{
return($v*$v);
}
$a=array(1,2,3,4,5);
print_r(array_map("myfunction",$a));
?>
使用php内置函数trim,去除数组元素首尾空白字符:
<?php
$a=array(" 1 "," 2","3 ","2","1");
var_dump(array_map("trim",$a));
?>
array_map:传入多个数组:
<?php
function myfunction($v,$vv)
{
return($v*$vv);
}
$a=array(1,2,3,4,5);
$b=array(6,7,8,9);
print_r(array_map("myfunction",$a,$b));
?>
很明显b数组比a数组少了一个元素,最终新数组第五个元素的值就变成了0!
araay_walk:
<?php
function myfunction($value,$key)
{
echo "The key $key has the value $value<br>";
}
$a=array("a"=>"red","b"=>"green","c"=>"blue");
array_walk($a,"myfunction");
?>
通过传引用修改数组元素即value:
<?php
function myfunction(&$value,$key)//key不能被修改
{
$value.="1";
}
$a=array("a"=>"red","b"=>"green","c"=>"blue");
array_walk($a,"myfunction");
echo '<pre>';
print_r($a);
?>
传入第三个参数作为回调函数的第三个参数:
<?php
function myfunction(&$value,$key,$num1)//key不能被修改
{
$value.=$num1;
}
$a=array("a"=>"red","b"=>"green","c"=>"blue");
array_walk($a,"myfunction",3);
echo '<pre>';
print_r($a);
?>