我继续收到以下错误,我想知道如何修复它。
Fatal error: Unsupported operand types on line 97
它围绕下面列出的代码区域。如果需要,我可以列出完整的代码。
PHP代码
$total_rating_points = mysqli_fetch_array($result);
if (!empty($total_rating_points) && !empty($total_ratings)){
$avg = (round($total_rating_points / $total_ratings,1));
$votes = $total_ratings;
echo $avg . "/10 (" . $votes . " votes cast)";
} else {
echo '(no votes cast)';
}
这是第97行
$avg = (round($total_rating_points / $total_ratings,1));
这是完整的代码。
function getRatingText(){
$dbc = mysqli_connect ("localhost", "root", "", "sitename");
$page = '3';
$sql1 = "SELECT COUNT(*)
FROM articles_grades
WHERE users_articles_id = '$page'";
$result = mysqli_query($dbc,$sql1);
if (!mysqli_query($dbc, $sql1)) {
print mysqli_error($dbc);
return;
}
$total_ratings = mysqli_fetch_array($result);
$sql2 = "SELECT COUNT(*)
FROM grades
JOIN articles_grades ON grades.id = articles_grades.grade_id
WHERE articles_grades.users_articles_id = '$page'";
$result = mysqli_query($dbc,$sql2);
if (!mysqli_query($dbc, $sql2)) {
print mysqli_error($dbc);
return;
}
$total_rating_points = mysqli_fetch_array($result);
if (!empty($total_rating_points) && !empty($total_ratings)){
$avg = (round($total_rating_points / $total_ratings,1));
$votes = $total_ratings;
echo $avg . "/10 (" . $votes . " votes cast)";
} else {
echo '(no votes cast)';
}
}
答案 0 :(得分:19)
$total_rating_points
是一个数组。你不能用数字来划分它。
答案 1 :(得分:3)
(自MySQL查询添加到问题以来编辑)
您已使用mysql_fetch_array
从MySQL获取结果,顾名思义这会返回一个数组。你不能在数组上做那样的数学运算。
您想将MySQL查询更改为:
$sql1 = "SELECT COUNT(*) as count
FROM articles_grades
WHERE users_articles_id = '$page'";
将mysql_fetch_array代码更改为:
$total_rating_points = mysql_result($result, 0, "count");
这将返回实际数字,然后您可以将其用于数学。将您的两个查询更改为此格式,您应该很高兴。
答案 2 :(得分:2)
这通常是因为您的某个变量的类型是您不期望它的类型。
$x = "8";
$y = 4;
$x / $y; // this is OK, PHP converts "8" to 8
$x = new FooObject();
$y = 4;
$x / $y; // PHP says "wtfmate??"
转储变量 $total_rating_points
和$total_ratings
:
var_dump($total_rating_points);
var_dump($total_ratings);
..然后通过你的代码向后工作(如果需要,检查 debug_backtrace()
)以找出它出错的地方。
编辑:duhhh ..我刚看了你的代码并看到了问题。 $total_rating_points
是一个数组,这就是问题的原因。你如何用数字划分数组?答:你不能。
您想要将数组的每个成员除以$total_ratings
吗?例如:
// input: [2, 4, 6, 16] / 2
// output: [1, 2, 3, 8]
function divideArrayMembers($arr, $denominator) {
$ret = array();
foreach ($arr as $key => $val) {
$ret[$key] = $val / $denominator;
}
return $ret;
}
......或者你想要除以总数?
input: [2, 4, 6, 16] / 2
output: 14 // (2 + 4 + 6 + 16) / 2
function divideTotal($arr, $denominator) {
return array_sum($arr) / $denominator.
}
答案 3 :(得分:1)
在array_sum()
和$total_rating_points
上使用$total_ratings
。
答案 4 :(得分:0)
{{1}}