私は人の名前とその高さからなる配列を持っています。変数に割り当てられた関数にラップされた関数array_reduce
を使って、平均の高さを求める必要があります。以下は私が今までに書いたコードです。配列がNULLであるarray_reduce
関数に渡されるまで、すべてが機能しているようです。私はコード内のコメントで説明しようとしました。なぜ配列が突然削除され、最も内側の関数に渡すのですか?array_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));
それはあなたが上記の宣言実際の配列を人の名前ではなく最初の関数パラメータですので、 '$のpeople'がnullの理由があります。 PHPはこのパラメータを 'carry 'と呼びます。デフォルトのキャリー値を指定しないと、nullとして開始されます。 – apokryfos
平均高さを計算する別の方法は次のとおりです。 '$ averageHeight = array_sum(array_column($ people、 'height'))/ count($ people);' –