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
        )

)
如果您觉得本文对您有用,欢迎捐赠或留言~
微信支付
支付宝

发表评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注