标签:
有时候,读者可能希望以相同方式使用或者修改数组中的每一个元素。array_walk()函数允许进行这样的操作。函数array_walk()的原型如下所示:
bool array_walk(array arr,string func,[mixed userdata])
其调用方法类似于前面所介绍的usort()函数的调用,array_walk()函数要求声明一个你自己的函数。正如你所看到的,array_walk()函数需要三个参数。第一个是arr,也就是需要处理的数组。第二个是func,也就是用户自定义并将作用于数组中每个元素的函数。
第三个参数userdata是可选的,如果使用它,它可以作为一个参数传递给我们自己的函数。
在接下来的内容,读者将了解这个函数是如何工作的.
这个用户自定义函数可以是一个以指定格式显示各个元素的函数。如下所示的代码通过在$array数组的每个元素中调用用户自定义的my_print()函数,从而将每个元素显示在一个新行中
function my_print($value){
echo"$value<br/>”;
}
array_walk($array,‘my_print‘);
以上所编写的这个函数还需要有特定的符号。对于数组中的每个元素,array_walk将以关键字和保存在数组中的值为参数,此外,还可以以任何数据作为该函数的userdata参数。可以按如下方式调用函数:
yourfunction(value,key,userdata);
在大多数情况下,函数只能处理数组中的值。但是,在某些情况下,可能还需要使用userdata参数向函数传递一个参数。在少数情况下,可能还需要对数组关键字和值进行处理。在MyPrint()函数中,可以忽略关键字参数和userdata参数。
在一个稍微复杂点的例子中,将编写一个带有一个参数的函数,这个函数可以用来修改数组的值。请注意,虽然对关键字并不感兴趣,但为了接收第三个参数变量,还是必须接收它:
function my_multiply(&$value,$key,$factor){
$value*=$factor;
}
array_walk(&$array,‘my_multiply‘,3);
在这里,定义了一个名为my_multiply()的函数,它可以用所提供的乘法因子去乘以数组中的每个元素。需要使用array_walk()函数的第三个参数来传递这个乘法因子。因为需要这个参数,所以在定义my_multiply()函数时必须带有三个参数——一个数组元素值($value)、一个数组元素的关键字($key)和参数($factor)。可以选择忽略这个关键字。
此外,还有一个需要注意的问题是传递参数$value的方式。在my_multiply()的函数定义中,变量前面的地址符(&)意味着$value是按引用方式传递的。按引用方式传递允许函数修改数组的内容。
标签:
原文地址:http://www.cnblogs.com/sunxiaorui/p/4397144.html