Php 使用array_reduce从数组中查找平均数

Php 使用array_reduce从数组中查找平均数,php,arrays,function,Php,Arrays,Function,我有一个由人名和身高组成的数组。我需要使用函数array\u reduce找到平均高度,该函数被包装在分配给变量的函数中。下面是到目前为止我编写的代码。在我将数组传递给array\u reduce函数之前,一切似乎都正常工作,然后该函数被置空。我试图用代码中的注释来解释它。为什么数组突然被删除?我如何将其传递给最内部的函数 $people = [ ['name'=> 'John' , 'height'=> 1.65], ['name'=> 'Peter' , 'hei

我有一个由人名和身高组成的数组。我需要使用函数
array\u reduce
找到平均高度,该函数被包装在分配给变量的函数中。下面是到目前为止我编写的代码。在我将数组传递给
array\u reduce
函数之前,一切似乎都正常工作,然后该函数被置空。我试图用代码中的注释来解释它。为什么数组突然被删除?我如何将其传递给最内部的函数

$people = [
  ['name'=> 'John'  , 'height'=> 1.65],
  ['name'=> 'Peter' , 'height'=> 1.85],
  ['name'=> 'Silvia', 'height'=> 1.69],
  ['name'=> 'Martin', 'height'=> 1.82]
];


$filter = function  ($people)
{
    $averageHeight = 0;
    $count = count($people);
    echo $count;
    //if I var_dump($people) - the array $people is FINE.
    return array_reduce(
            $people,
            function ($people) use (&$averageHeight, &$count)
            {
                $averageHeight += $people['height'] / $count;    
                return $averageHeight;
                //var_dump($people); - var people is NULL. Where did it go?
            }
    );
};

print_r($filter($people));

这就是使用
array\u reduce
获得平均值的方法:

function array_average($array) {
    $carry = null;
    $count = count($array);
    return array_reduce($array, function ($carried, $value) use ($count) {
         return ($carried===null?0:$carried) + $value/$count;
    },$carry);
}
该函数将使用累加器和值作为参数,并应返回要传送到下一个元素的值

您可以将其用作:

 $averageheight = array_average(array_column($people,"height"));
这导致:

1.7525

下面是一个例子:

如果您需要将这整件事作为可调用项,请执行以下操作:

function array_average($array) {
    $carry = null;
    $count = count($array);
    return array_reduce($array, function ($carried, $value) use ($count) {
         return ($carried===null?0:$carried) + $value/$count;
    },$carry);
}

$filter = function ($people) {
     return array_average(array_column($people,"height"));
};

 print_r($filter($people));

这就是如何使用
array\u reduce
获得平均值的方法:

function array_average($array) {
    $carry = null;
    $count = count($array);
    return array_reduce($array, function ($carried, $value) use ($count) {
         return ($carried===null?0:$carried) + $value/$count;
    },$carry);
}
该函数将使用累加器和值作为参数,并应返回要传送到下一个元素的值

您可以将其用作:

 $averageheight = array_average(array_column($people,"height"));
这导致:

1.7525

下面是一个例子:

如果您需要将这整件事作为可调用项,请执行以下操作:

function array_average($array) {
    $carry = null;
    $count = count($array);
    return array_reduce($array, function ($carried, $value) use ($count) {
         return ($carried===null?0:$carried) + $value/$count;
    },$carry);
}

$filter = function ($people) {
     return array_average(array_column($people,"height"));
};

 print_r($filter($people));

使用这段代码,我们在sum函数中没有找到数组总数,因此,我将在print\u r()函数中使用这段代码。
使用这段代码,我们在sum函数中没有找到数组总数,因此,我将在print\u r()函数中使用这段代码。

之所以
$people
为空,是因为它是您命名people的第一个函数参数,而不是您上面声明的实际数组。PHP将此参数称为
$carry
,它是带进位的值。如果不提供默认进位值,它将以null开头。计算平均高度的另一种方法是:
$averageHeight=array\u sum(array\u column($people,'height'))/count($people)
之所以
$people
为空,是因为它是您命名people的第一个函数参数,而不是您上面声明的实际数组。PHP将此参数称为
$carry
,它是带进位的值。如果不提供默认进位值,它将以null开头。计算平均高度的另一种方法是:
$averageHeight=array\u sum(array\u column($people,'height'))/count($people)好的,这很有效,但我需要将函数分配给一个变量。我试着这样打印($filter(数组平均值)(数组列($people,“height”)))但我得到了
解析错误:语法错误,意外的“print_r”(T_STRING)
@pidari更新。你也可以在变量中声明函数,但它是一个非常通用的函数,所以你可以在其他地方找到它的用法。好的,这很有效,很好,但是我需要将函数分配给一个变量。我试着这样打印($filter(数组平均值)(数组列($people,“height”)))但我得到了
解析错误:语法错误,意外的“print_r”(T_STRING)
@pidari更新。您也可以在变量中声明函数,但它是一个非常通用的函数,因此您也可以在其他地方找到它的用途。