class Test
{
function testWalk()
{
$a = ['a'=>1, 'b'=>2];
$b = [$a, 'c'=>3, 'd'=>4];
array_walk_recursive($a, [$this, 'walk'] );
}
function testMap()
{
$a = ['a'=>1, 'b'=>2];
$b = [$a, 'c'=>3, 'd'=>4];
array_walk_recursive($a, [$this, 'Map'] );
}
function walk(&$v, $k)
{
$v = pow($v, 3);
}
function map($v)
{
return pow($v, 6);
}
}
今天看tp框架的源码,发现对array_walk_recursive和array_map两个函数并不太熟悉,就写个例子测试一下。
当在类中使用这个两个函数时,他们中的回调参数不能写成array_walk_recursive($arr, 'callback')或array_map('callback', $arr)的形式,否则会提示找不到该函数。应该写成array_walk_recursive($arr, [$this, 'callback'])或array_map([$this, 'callback'], $arr)的形式。
此外,array_walk_recursive返回的是bool类型,array_map返回的是改变后的数组,所以二者的回调函数一个有返回值,一个没有返回值。若希望通过array_walk_recursive改变一个数组,需要将数组的引用作为参数传入,即:$arr参数变为&$arr,否则改变的只是该数组的副本,原来的数组并没有被改变。