我有一个包含多条记录的数据库。它的结构如下:
["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个值的平均值。我怎么能这样做?
答案 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);
}