gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 21:57:19 24 4
gpt4 key购买 nike

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

array_sum() expects parameter 1 to be array, object given

代码:

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() 循环会更有效。

最佳答案

$stmt 是一个 mysqli_result,不是查询中值的数组。您必须调用提取函数来获取值。 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);
}

关于php - 获取 PHP 警告 array_sum() 期望参数 1 为数组,给定对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44687933/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com