- 此问题在此处已有答案**:
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值并计算平均值吗?
3条答案
按热度按时间luaexgnf1#
下面是一个迭代解决方案的示例,因为您正在询问它是如何工作的:
我添加了
if (isset($obj->AdjClose)
检查,因为您询问了if(@$data->data->AdjClose)
,我认为这意味着AdjClose
可能不存在于某些对象中,如果是这种情况,我想说明如何检查它,而不是使用错误抑制操作符(@
)。如果您希望不包含AdjClose
的项作为零包含在平均值中,可以将$total++
移出if
块。如果您有PHP 7,您也可以使用
array_column
来实现这一点(但是同样,除非您希望将丢失的AdjClose
属性作为零包含在平均值中,否则只有在所有对象上都定义了AdjClose
时才使用此方法)。dy2hfwbg2#
在本例中,使用我建议的
foreach
循环结构之一处理数组b1zrtrql3#
简单代码: