php数组回调

2021-10-14
// 对数组$arrays中的每一个元素使用$callback回调进行处理,返回处理后的结果;
// $callback的参数为数组的每一个元素;$callback为null时返回一个二维数组,数组值为每次传给$callback的参数
// $arrays可以为多个,多个$arrays时$callback的参数应与$arrays的数量相同;多个$arrays将被处理为一个数组;多个$arrays时,如果元素数量不同,元素少的$array将使用null补充到最长的数组的长度
array_map($callback, ...$arrays);

var_dump(array_map(function($val1, $val2){return $val1 + $val2;}, [1, 2, 3], [3, 2, 10]));
var_dump(array_map(null, [1, 2, 3], [3, 2, 10]));

// 对数组$array中的每一个元素使用$callback回调,将$array处理为一个值,返回处理后的结果;
// $callback参数为上次迭代的值$carry和当前元素的值$item,第一次迭代时$carry为$initial;
array_reduce($array, $callback, $initial = null);

var_dump(array_reduce([1, 2, 3], function($carry, $item){return $carry + $item;}));

// 对数组$array中的每一个元素使用$callback回调,返回结果为回调是否执行成功的布尔值;如果需要改变数组数据,需要对$callback的第一个参数进行引用传递
// $callback参数为数组$array的值$value和数组$array的键$key以及$userdata
array_walk($array, $callback, $userdata = null);

$array = [1, 2, 3];
array_walk($array, function(&$value, $key, $userdata) {
    var_dump('value:' . $value . '--key:' . $key . '--userdata:' .  $userdata);
    $value = $key * $userdata + $value;
}, 10);
var_dump($array);

// 对数组$array中的每一个元素使用$callback回调,返回结果为回调是否执行成功的布尔值;如果需要改变数组数据,需要对$callback的第一个参数进行引用传递
// $callback参数为数组$array的值$value和数组$array的键$key以及$userdata
// 函数会递归到更深层的数组中,可以对多维数组使用
array_walk_recursive($array, $callback, $userdata = null);

$array = [[1, 2, [4, 5, 6]], [20, 30, [50, 60, [70, 80]]], 100];
array_walk_recursive($array, function(&$value, $key, $userdata) {
    var_dump('value:' . $value . '--key:' . $key . '--userdata:' .  $userdata);
    $value = $key * $userdata + $value;
}, 10);
var_dump($array);

 

{/if}