如何平均数组值

时间:2016-06-03 09:48:32

标签: php mysql

我有一个包含多条记录的数据库。它的结构如下:

["data"]=>
  array(5) {
   [1]=>
    [2]=>
      array(11) {
        [0]=>
        string(1) "0"
        [1]=>
        string(8) "25000000"
        [2]=>
        string(3) "day"
        [3]=>
        string(5) "0.00%"
        [4]=>
        string(9) "404049904"
        [5]=>
        string(1) "0"
        [6]=>
        string(5) "0.00%"
        [7]=>
        string(1) "0"
        [8]=>
        string(1) "0"
        [9]=>
        string(1) "0"
        [10]=>
        string(3) "0.0"
      }

我需要获取第8条记录,然后使用

执行此操作
public static function($data)
        {
            $array = [];
            $path = $data->data[2];
            foreach($path as $key => $item)
                if($key > 1)
            {
                $array[] = [$item->data[8]];
            }

            return json_encode($array);
        }

这个foreach从数组中获取所有第8个值,但我需要显示一个数字,它是所有第8个值的平均值。我怎么能这样做?

5 个答案:

答案 0 :(得分:1)

一旦你的数组包含了你的所有数据,就可以简单地对数组求和,然后除以数组的大小..这些行中的东西

$average = (array_sum($array) / count($array));

当然,您可能希望检查count($array)是否为0;

答案 1 :(得分:0)

if (count($array)>0){
    $avg = array_sum($array) / count($array);
}

答案 2 :(得分:0)

因为您将值放入新数组中,所以不能使用array_sum对值求和,因此您应该存储它。

$sum = 0;
foreach($path as $key => $item)
   if($key > 1)   {
      $array[] = [$item->data[8]];
      $sum += $item->data[8];
   }
}
$avg = ($sum / count($array); //the average
var_dump($avg);

如果可能,只需将其作为值:

$array[] = $item->data[8];  //no wrapping []

在这种情况下,您可以使用$avg = array_sum($array) / count($array);

答案 3 :(得分:0)

在数据到达PHP脚本本身之前,我会亲自在数据库中进行这些计算。请参阅AVG()

如果由于某种原因无法使用,我会将这些值输出到平面数组中,然后计算平均值。如下所示:

function getAverage($data) {
  $flatArray = array();
  foreach ($data as $row) {
    if (!empty($row->8)) {
        $flatArray[] = $row->8;
    }
  }
  return (array_sum($flatArray)/count($flatArray));
}

编辑:移动到对象遍历数据行,抱歉,最初错过了,并认为它是所有巢中的数组。

答案 4 :(得分:0)

因为你的静态方法中有一个循环;如果您需要JSON格式的数据,为什么不在其中进行计算并将其返回或添加到JSON数据?这是以上所暗示的内容:

        public static function getAverageSum($data) {
            $array      = [];
            $path       = $data->data[2];
            $sumTotal   = 0.00;     //<== YOU COULD JUST SUM IT DIRECTLY WITHOUT USING AN ARRAY
            foreach($path as $key => $item) {
                if ($key > 1) {
                    $array[]    = $item->data[8];
                    $sumTotal  += floatval($item->data[8]);
                }
            }

            // IF YOU ARE ONLY INTERESTED IN THE AVERAGE SUM YOU COULD EVEN ADD IT IT TO THE $array AS AN EXTRA KEY
            // LIKE SO:
            $arrLen             = count($array);
            $array['avgSum']    = $sumTotal/$arrLen;


            // IF YOU NEED YOUR DATA IN JSON... THEN RETURN THE JSON ENCODED DATA WITH SUM AS PART OF THE DATA.
            // YOU'D HAVE NO NEED FOR array_sum() SINCE YOU DID YOUR PREP-WORK ALREADY...
            return json_encode($array);

            // ALTERNATIVELY; IF ALL YOU NEED IS JUST THE AVERAGE SUM; YOU COULD AS WELL DIRECTLY RETURN $sumTotal/$arrLen
            return ($sumTotal/$arrLen);

        }