php 计算二维数组的特定列中所有值的平均值[重复]

sczxawaw  于 2023-01-04  发布在  PHP
关注(0)|答案(3)|浏览(105)
    • 此问题在此处已有答案**:

PHP Average of subkeys in an array(5个答案)
5小时前关门了。
我需要求二维数组中所有AdjClose值的平均值。
我在变量$data中存储了一个数组,它看起来像这样:

["data"]=>
  array(22) {
    [0]=>
    object(stdClass)#234 (7) {
      ["Date"]=>
      string(10) "2016-08-31"
      ["Open"]=>
      string(9) "767.01001"
      ["High"]=>
      string(10) "769.090027"
      ["Low"]=>
      string(10) "765.380005"
      ["Close"]=>
      string(10) "767.049988"
      ["Volume"]=>
      string(7) "1247400"
      ["AdjClose"]=>
      string(10) "767.049988"
    }
    [1]=>
    object(stdClass)#240 (7) {
      ["Date"]=>
      string(10) "2016-08-30"
      ["Open"]=>
      string(10) "769.330017"
      ["High"]=>
      string(10) "774.466003"
      ["Low"]=>
      string(10) "766.840027"
      ["Close"]=>
      string(10) "769.090027"
      ["Volume"]=>
      string(7) "1127100"
      ["AdjClose"]=>
      string(10) "769.090027"
    }

它有大约22个条目,我想迭代每个["AdjClose"]并计算这些数字的平均值。
据我所知,我应该这样写:if(@$data->data->AdjClose)但这就是我的问题开始的地方。
有人能给我解释一下如何迭代对象/行访问和存储AdjClose值并计算平均值吗?

luaexgnf

luaexgnf1#

下面是一个迭代解决方案的示例,因为您正在询问它是如何工作的:

// initialize sum and total
$sum = 0;
$total = 0;

foreach ($data->data as $obj) {
    if (isset($obj->AdjClose)) {   // verify that the current object has an AdjClose
        $sum += $obj->AdjClose;    // add it to the sum
        $total++;                  // increment the count
    }
}
echo $sum / $total;                // display the average

我添加了if (isset($obj->AdjClose)检查,因为您询问了if(@$data->data->AdjClose),我认为这意味着AdjClose可能不存在于某些对象中,如果是这种情况,我想说明如何检查它,而不是使用错误抑制操作符(@)。如果您希望不包含AdjClose的项作为零包含在平均值中,可以将$total++移出if块。
如果您有PHP 7,您也可以使用array_column来实现这一点(但是同样,除非您希望将丢失的AdjClose属性作为零包含在平均值中,否则只有在所有对象上都定义了AdjClose时才使用此方法)。

$average = array_sum(array_column($data->data, 'AdjClose')) / count($data->data)
dy2hfwbg

dy2hfwbg2#

在本例中,使用我建议的foreach循环结构之一处理数组

$cnt = 0;
$tot = 0;
foreach ( $data['data'] as $obj ) {

    $cnt++;
    $tot += (float)$obj->AdjClose;
}

$mean = $tot / $cnt;
echo 'The mean is ' . $mean;
b1zrtrql

b1zrtrql3#

简单代码:

$total = 0;
foreach($data['data'] as $item) {
    $total += (float)item->AdjClose;
}

$res = $total / count($data['data']);

相关问题