内部阵列的平均值

时间:2016-01-24 10:56:48

标签: php multidimensional-array foreach

我的任务是计算数组的平均值。

$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;
      }
}

但它不起作用。我觉得我在调用内部数组时做错了。

4 个答案:

答案 0 :(得分:0)

如果您的数组包含索引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循环,因为这将仅返回第一个平均值。所以你可以声明新数组来填充所有平均值。

答案 1 :(得分:0)

function average($array){
  return array_sum($array) / count($array);
}

foreach($arrayToTest as $array){
  echo "Average: " . average($array[0]);
}

答案 2 :(得分: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 。否则它将返回第一个不匹配的索引。

答案 3 :(得分:0)

注释:

  • 我假设您希望计算最里面的数组的平均值。
  • 下面的解决方案会返回每个阵列的平均值 - 而不是所有阵列的平均值。但是 - 当然你很容易计算出所有阵列的平均值。
  • 因此函数 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
)