获取PHP警告array_sum()期望参数1是数组,给定对象?

时间:2017-06-21 23:50:37

标签: php mysql arrays mysqli

尝试获取查询结果的总和,我得到:

  

array_sum()期望参数1是数组,给定对象

使用代码:

function getPerformance($limit, $mysqli) {
    if (is_numeric($limit)) {
        $limit = 'LIMIT '.$limit;
    } else {
        $limit = NULL;
    }
    if ($stmt = $mysqli->query("SELECT time FROM admin_performance ORDER BY id DESC $limit")) {
        $average = array_sum($stmt) / count($stmt);
        $average = number_format(($average*1000),2,'.',',');
    } else {
        $average = 'Error';
    }
    return $average;
}

我还尝试在查询之后使用$ array = mysqli_fetch_array($ stmt)并将array_sum($ stmt)更改为array_sum($ array)并得到相同的东西。

我解决了这个问题:

function getPerformance($limit, $mysqli) {
    if (is_numeric($limit)) {
        $limit = 'LIMIT '.$limit;
    } else {
        $limit = NULL;
    }
    if ($stmt = $mysqli->query("SELECT time FROM admin_performance ORDER BY id DESC $limit")) {
        $rows = mysqli_num_rows($stmt);
        $sum = 0;
        while ($array = mysqli_fetch_array($stmt)) {
            $sum += $array['time'];
        }
        $average = $sum/$rows;
        $average = number_format(($average*1000),2,'.',',');
    } else {
        $average = 'Error';
    }
    return $average;
}

但是我做错了什么?我认为没有while()循环会更有效率。

1 个答案:

答案 0 :(得分:0)

$stmtmysqli_result,而不是查询中的值数组。您必须调用fetch函数来获取值。而fetch函数一次只返回一行,而不是所有结果的数组。

如果您有MYSQLND驱动程序,则可以使用$stmt->fetch_all()。这将返回一个二维数组 - 数组的每一行都是结果的一行。您不能在此使用array_sum(),因为它需要值的一维数组。但是你可以使用array_column()返回一个特定列的数组,然后加上它。

$rows = $stmt->fetch_all();
$average = array_sum(array_column($rows, 'time')) / count($rows);

但更有效的方法是计算SQL中的平均值。

if ($stmt = $mysqli->query("SELECT AVG(time) AS avgtime FROM (SELECT time FROM admin_performance ORDER BY id DESC $limit) AS x")) {
    $row = $stmt->fetch_assoc();
    $average = $row['avgtime'];
} else {
    die($mysqli->error);
}