Неустранимая ошибка: неподдерживаемые типы операндов - PullRequest
7 голосов
/ 16 января 2010

Я получаю следующую ошибку, и мне было интересно, как ее исправить.

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)';
    }
}

Ответы [ 5 ]

19 голосов
/ 16 января 2010

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

3 голосов
/ 16 января 2010

(отредактировано с тех пор, как в вопрос был добавлен запрос 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 голосов
/ 16 января 2010

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

$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(), если требуется), чтобы найти, где он ошибся.

Редактировать: даааа .. Я просто снова посмотрел на твой код и увидел проблему. $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.
}
1 голос
/ 16 января 2010

Используйте array_sum() на $total_rating_points и $total_ratings.

0 голосов
/ 04 августа 2016
if($_REQUEST['cityCode'] != ''){ 
    $_SESSION['Cri_locations'] = $_REQUEST["s"];
    $_SESSION['Cri_DateFrom'] = $_REQUEST["startDate"];
    $_SESSION['Cri_DateTo'] = $_REQUEST["endDate"];
    $what_to_search_id =str_replace("AREA-","",$_REQUEST["cityCode"]);
    $total_adults =0;
    $total_childs =0;
    $child_ages =0;
    $no_of_room =0;

    for($i=1;$i<=$_REQUEST["Cri_noofRooms"];$i++){ 
        $check_adults =$_REQUEST['adults-r'.$i.''];
        if($check_adults>0){
          $adults =$_REQUEST['adults-r'.$i.''];
          $childs =$_REQUEST['childs-r'.$i.''];
          $childAge =$_REQUEST['childAge-r'.$i.''];
          $packs_arr[] =array('adults'=>$adults,'childs'=>$childs,'childAge'=>$childAge);
          $total_adults =$total_adults+$adults;
          $total_childs =$total_childs+$childs;
          $child_ages =$child_ages+$childAge;//error accours here pls help 
          $no_of_room =$no_of_room+1;

        }
    } 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...