PHP用foreach来表达array_walk/array_filter/array_map/array_reduce

array_map(callback,array) 我称之为数组更新,表示对数组的每一项进行callback运算后返回一个新数组.
array_walk(array,callback) 我称之为数据遍历,表示对数组每一项进行callback处理,没有返回.
array_reduce(array,callback) 称之为数据核算,表示对数组每一项进行callback处理合并并返回为一个值
array_filter(array,callback) 称之为数组过滤,表示对数组每一项进行callback处理,return true的值保留在原数组.
array_walk/array_filter/array_map/array_reduce
遍历数组, 回调函数, 遍历一次, 回调一次
array_walk相当于foreach

$arr = ['client'=>'js','cerver'=>'go'];
array_walk($arr,'walk' );

function walk($v, $k) {
    echo "键:$k 值:$v\n";
}

比如去除数组$arr元素的前后空白

array_walk($arr, function(&$v) { $v = trim($v); });
foreach($arr as &$v) { $v = trim($v); }

array_filter用回调函数过滤数组中的单元,返回过滤后的数组

var_export(
    array_filter([1, 2, 3,4], function($v) {
        return $v > 1;
    })
);

foreach([1, 2, 3,4] as $k => $v) {
    if($v > 1) {
        $tmp[$k] = $v;
    }
}
var_export($tmp);

都输出:

array (
  1 => 2,
  2 => 3,
  3 => 4,
)

PHP数组映射化简(MapReduce)
array_map/array_reduce
array_map: 将回调函数作用到给定数组的单元上

var_export(
    array_map(function ($v) {
        return $v * $v;
    }, [1, 2, 3,4])
);

foreach([1, 2, 3,4] as $v) {
    $tmp[] = $v * $v;
}

var_export($tmp);
都输出:
array (
0 => 1,
1 => 4,
2 => 9,
3 => 16,
)

array_reduce 用回调函数迭代地将数组简化(reduce)为单一的值

数组值累加可使用array_reduce函数

//输出16,即10+1+2+3,其中10作为初始值
//输出10,即0+1+2+3,其中0作为初始值
echo array_reduce([1, 2, 3], function($result, $item) {
    $result = $result + $item;
    return $result;
}, 0);

用foreach表达

$result = 10;
foreach([1, 2, 3] as $v) {
    $result = $result + $v;
}
echo $result;
本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!