Фатальная ошибка: неподдерживаемые типы операнда

Я Продолжаю получать следующую ошибку, и я задавался вопросом о том, как зафиксировать ее.

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)';
    }
}
8
задан David 15 August 2011 в 16:47
поделиться

4 ответа

$ total_rating_points - это массив. Вы не можете разделить его по номеру.

19
ответ дан 5 December 2019 в 06:37
поделиться

, которые обычно вызываются, когда тип одной из ваших переменных - это то, что вы не ожидаете этого.

$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.
}
2
ответ дан 5 December 2019 в 06:37
поделиться

(отредактировано, поскольку запрос 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");

, который вернет фактическое число, которое вы можете использовать для математики. Измените оба ваших запроса к этому формату, и вы должны быть хорошими, чтобы пойти.

3
ответ дан 5 December 2019 в 06:37
поделиться

Использование Array_Sum () на $ total_rating_points и $ total_ratings .

1
ответ дан 5 December 2019 в 06:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: