我的任务是计算数组的平均值。
$arrayToTest = [[[1], 1], [[1,3,5,7], 4], [[2,5,4,1,2,3], 2.8],
[[-1,-1,-1,-1,-1], -1], [[4,23,84,12,76,34,-7,-23], 25.375]];
从内部数组,所以对于example [1,3,5,7]
和期望值为 4。我必须使用一个函数,我试过这个:
function arrayAverage ($arrayToTest)
{
foreach($arrayToTest as $case)
foreach ($case as $item)
{
$arraySum = array_sum($item);
$arrayCount = array_count_values($item);
$average = $arraySum / $arrayCount;
return $average;
}
}
但它不起作用。我觉得我在调用内部数组时做错了什么。
注释:
- 我假设您希望计算最里面数组的平均值。
- 下面的解决方案返回每个数组的平均值 - 而不是所有数组的平均值。但是 - 当然,您可以轻松地计算所有数组的平均值。
- 因此,函数 arrayAverage(...) 返回一个平均值数组,而不是(仅)最后一个数组的平均值。
- 我明确声明了输入数组(arrayToTest),因为可以更好地看到这样的数组结构(数组和标量数组)。
法典:
<?php
$arrayToTest = array (
array(
array(1),
1
),
array(
array(1,3,5,7),
4
),
array(
array(2,5,4,1,2,3),
2.8
),
array(
array(-1,-1,-1,-1,-1),
-1
),
array(
array(4,23,84,12,76,34,-7,-23),
25.375
)
);
echo '<pre>'; print_r($arrayToTest); echo '</pre>';
$average = arrayAvarage ($arrayToTest);
echo '<pre>'; print_r($average); echo '</pre>';
function arrayAvarage ($arrayToTest) {
$result = array();
foreach($arrayToTest as $case) {
foreach ($case as $items) {
if (!is_array($items)) continue;
$result[] = array_sum($items) / count($items);
}
}
return $result;
}
?>
结果:
Array
(
[0] => 1
[1] => 4
[2] => 2.8333333333333
[3] => -1
[4] => 25.375
)
如果您的数组在索引 0 中包含内部数组,则可以通过以下方式执行此操作:
function arrayAvarage ($arrayToTest)
{
$out_put_arr = array();
foreach($arrayToTest as $case)
{
$arraySum = array_sum($case[0]);
$arrayCount = array_count_values($case[0]);
$avarage = $arraySum / $arrayCount;
$out_put_arr[]= $avarage;
}
return $out_put_arr;
}
所以主数组的循环,主数组中的每个项目都会给你数组,int $case[0] = [1,3,5,7]
和 $case[1] = 4
,你也不应该返回 for 循环,因为这只会返回第一个平均值。 因此,您可以声明新数组以填充所有平均值。
function average($array){
return array_sum($array) / count($array);
}
foreach($arrayToTest as $array){
echo "Average: " . average($array[0]);
}
您应该查看 $case数组的第一个元素,这是带有值的数组所在的实际位置。请注意,您也可以使用 array_sum 函数。
另外,您不应该像那样return
,因为这会中断函数执行更多操作。所以,只有当你真的想这样做时,才return
。
由于您已经有了预期值,我认为您的函数没有理由再次返回这些平均值。相反,它可以验证这些预期值的正确性,并在比较失败时返回数组的索引。
function arrayAverage ($arrayToTest)
{
foreach($arrayToTest as $index => $case) {
$average = array_sum($case[0]) / count($case[0]);
if ($average !== $case[1]) {
return $index; // not expected value
}
}
return false; // all averages are equal to expected value
}
因此,当所有平均值都符合预期时,上述函数将返回 FALSE。否则,它将返回第一个不匹配的索引。