array_walk:使用用户自定义函数对数组中的每个元素做回调处理,接受三个参数,第一个为要操作的数组引用,第二个为回调函数名,第三个参数为可选的参数,该参数的值会作为第三个参数传入回调函数,默认为null。成功返回true,失败返回false。通常回调函数接受两个参数,第一个为数组的值,第二个为数组的键,如果回调函数想要对数组的值做修改,那么在定义回调函数时,需要回调函数的第一个参数指定为引用,回调函数不能修改数组的结构,如添加、删除单元等。如果回调函数需要的参数比传入的参数多则每次调用回调函数时都会产生警告。此函数不会受数组内部的指针影响。
array_walk_recursive:与array_walk不同的是对数组中的每个成员递归地应用用户函数。
array_filter:用回调函数过滤数组中的单元,接受三个参数,第一个为要操作的数组,第二个为可选的回调函数名,第三个参数为可选的回调函数标记,默认为0,表示回调函数只接受数组值一个参数。对于使回调函数返回true的值将包含在返回的数组中,返回值保留原数组的键名。如果没有提供回调函数,将返回数组中所有等值为true的单元。
array_map:为数组的每个元素应用回调函数,回调函数的参数数量应与传入的数组数量一致,传入多个数组时,数组中元素的数量如果不相同,则会使用空元素来扩展元素数量少的数组直到数组长度相同。如果回调函数传入null,则会创建一个多维数组。回调函数的返回值将作为数组的元素返回。
array_reduce:用回调函数迭代地将数组简化为单一的值,接受三个参数,第一个参数为要进行迭代的数组,第二个参数为回调函数,回调函数包含两个参数,第一个为上次迭代里的值,如果本次迭代是第一次,那么这个值为array_reduce函数的第三个参数的值,第二个为本次迭代的值。第三个参数为可选的初始值,默认为null。
<?php
$ar1=range('a','e');
$ar2=array(
'a',
'b',
range('c','e')
);
function printKV($v,$k){
echo $k."=>".$v."\n";
}
function changeV(&$v,$k){
$v=$v.$k;
}
function addPre(&$v,$k,$prefix){
$v=$prefix."_".$v;
}
function filterC($v){
return stripos($v,'c')>-1;
}
function filterC1($v,$k){
return stripos($v,'c')>-1 || $k>3;
}
array_walk($ar1,printKV);
array_walk($ar1,addPre,"p");
var_dump($ar1);
array_walk($ar1,changeV);
var_dump($ar1);
array_walk_recursive($ar2,printKV);
array_walk_recursive($ar2,addPre,"p");
var_dump($ar2);
var_dump(array_filter($ar1,filterC));
var_dump(array_filter($ar1,filterC1,ARRAY_FILTER_USE_BOTH));
$ar3=range(1,5);
$ar4=range('a','e');
function showKV($arg1,$arg2){
return "key:".$arg1.",value:".$arg2."\n";
}
function double($arg1,$arg2){
return array($arg1.$arg1=>$arg2.$arg2);
}
var_dump(array_map(showKV,$ar3,$ar4));
$ar5=array_map(double,$ar3,$ar4);
var_dump($ar5);
function combine($carry,$item){
foreach($item as $k=>$v){
$carry[$k]=$v;
}
// return array_merge($carry,$item);
return $carry;
}
var_dump(array_reduce($ar5,combine,array()));
?>