在php中使用array_reduce、array_walk、array_map等函数处理数组

作者:admin     字体:[增加 减小]    类型:原创
php是一门非常灵活的高级语言,尤其是php5.3之后,PHP添加了很多新功能,我们在编程中可以少使用循环语句,多使用array_reduce、array_walk、array_map等函数处理数组,下面跟着泡泡脚本网的站长一起来学习吧。

假设有一个数组,数组元素都是数字,我们想要计算这些元素的平均值和标准差。若使用非函数式编程风格的话,代码会是这样:

$data = array(1,2,2,4,6,6,8,7); //这是待处理的数组
$len = count($data);

//平均数是所有元素的累加值除以元素个数
$total = 0;     
foreach($data as $val)  $total += $val;
$mean = $total / $len;  //平均值

//计算标准差,首先计算每个数据减去平均数之后偏差的平方然后求和
$total = 0;
foreach($data as $val) {
    $deviation = $val - $mean;
    $total += $deviation * $deviation;          
}

$stddev = sqrt($total/($len-1));

echo $stddev;   //2.6       
}
var stddev = Math.sqrt(total/(data.length-1));  //标准差
console.log(stddev);    //2.6

下面的给出的演示代码是在ThinkPHP中完成的。

在php中利用foreach循环计算标准差

我们可以使用数组函数array_map、array_walk、array_reduce来实现同样的计算,这种实现有时候极其简洁。

$data = array(1,2,2,4,6,6,8,7); //这是待处理的数组
$len = count($data);
$sum = create_function('$x,$y','return $x+$y;');
$square = create_function('$x','return $x*$x;');
$mean = array_reduce($data,$sum)/$len;
$deviations = $data;
array_walk($deviations,function(&$x,$key,$mean){$x = $x-$mean;},$mean);
$stddev = sqrt(array_reduce(array_map($square,$deviations),$sum)/($len-1));
echo $stddev;   //2.6

下面的给出的演示代码是在ThinkPHP中完成的。

在php中利用array_walk、array_map、array_reduce等函数计算标准差

我们在编程过程过程中应尽量多使用array_map、array_reduce、array_walk等函数,尽量减少使用循环语句。