array_walk数组处理
比如有以下数组
$arr = ["a" => 1, "b" => 2, "c" => 3, "d" => 4, "e" => 5];
如果想让其每个数值都添加指定的前缀prefix
,我之前的做法是这样的
$arr = ["a" => 1, "b" => 2, "c" => 3, "d" => 4, "e" => 5];
$prefix = "prefix";
foreach ($arr as $val) {
$new_arr[] = "$prefix:$val";
}
print_r($new_arr);
输出
Array
(
[0] => prefix:1
[1] => prefix:2
[2] => prefix:3
[3] => prefix:4
[4] => prefix:5
)
其实,在php中已经提供相应的函数,可以使用array_walk
对数组中每个数值进行回调,使用方式如下
$arr = ["a" => 1, "b" => 2, "c" => 3, "d" => 4, "e" => 5];
function test_alter(&$item1, $key, $prefix) {
$item1 = "$prefix: $item1";
}
array_walk($arr, 'test_alter', 'item');
print_r($arr);
能达到和上面同样的效果。array_walk
分别传入三个参数,分别为数组arr
,回调函数test_alter
,第三个参数对应回调函数的第三个参数。可以看到回调函数中的第三个参数为prefix
,即前缀。
当数组更加复杂,数组嵌套多级数组时,可以使用array_walk_recursive
来实现效果。这个函数是使用递归的方式应用到数组中的每一个成员上。
所以当有如下数组时
$arr1 = ["a" => 1, "b" => 2, "c" => 3, "d" => 4, "e" => 5, "f" => [
'a' => 1,
'v' => 3
]];
此时,使用array_walk_recursive
来实现添加前缀名
$arr1 = ["a" => 1, "b" => 2, "c" => 3, "d" => 4, "e" => 5, "f" => [
'a' => 1,
'v' => 3
]];
function test_alter(&$item1, $key, $prefix) {
$item1 = "$prefix: $item1";
}
array_walk_recursive($arr1, 'test_alter', 'item');
print_r($arr1);
输出结果
Array
(
[a] => item: 1
[b] => item: 2
[c] => item: 3
[d] => item: 4
[e] => item: 5
[f] => Array
(
[a] => item: 1
[v] => item: 3
)
)
如果您觉得本文对您有用,欢迎捐赠或留言~
- 本博客所有文章除特别声明外,均可转载和分享,转载请注明出处!
- 本文地址:https://www.leevii.com/?p=759