【问题标题】:PHP Fatal error: Cannot use object of type stdClass as arrayPHP 致命错误:不能将 stdClass 类型的对象用作数组
【发布时间】:2013-05-15 01:30:36
【问题描述】:

我需要下面的帮助,我知道它过去曾提出过,但我目前正在努力找出错误不能使用 stdClass 类型的对象作为在线数组

$score[$counter] = ($bronze * $tempArray[6]) + ($silver * $tempArray[5]) + ($silver * $tempArray[4]);

代码:

<?php
       //turning the date other way around that is why explode the date string and stored in an Array
    $gold=$_GET['gold_input'];
    $silver=$_GET['silver_input'];
    $bronze=$_GET['bronze_input'];
    $gdp_value=$_GET['gdp_checked'];
    $link = new mysqli('localhost', 'root', '','coa123cdb');
    $myArray = array();
    //data format for information
//[{"name":"Ahmet Akdilek","country_name":"Turkey","gdp":"773091000000","population":"72752000"}
    $query = "SELECT  * FROM  coa123cdb.Country";

    $result = mysqli_query($link, $query)
    or die("Error: ".mysqli_error($link));
    $row_cnt = $result->num_rows;
    if ($result = $link->query($query)) {
    $tempArray = array();
    $scorex=array($row_cnt);
    $score=(object)$scorex;
    $counter=0  ;
    //while($row = $result->fetch_object()) {
    while($row=mysqli_fetch_object($result)){

      $tempArray = $row;
                if($gdp_value==0)
            {
            $score[$counter]=($bronze*$tempArray[6])+($silver*$tempArray[5])+($silver*$tempArray[4]);
            }
            else
            {$score[$counter]=($bronze*$tempArray[6]+$silver*$tempArray[5]+$silver*$tempArray[4])*$tempArray[1]/$tempArray[2]/10000;
            }
            array_push($tempArray, $score[$counter]);
            array_push($myArray, $tempArray);
                            $counter=$counter+1;
        }



        //var_dump($score);
    echo json_encode($myArray);
    }

    $result->close();
    $link->close();

  ?>

【问题讨论】:

  • 你为什么不包括这一行?
  • 我在下面做的是我在 $score[$counter]=($bronze*$tempArray[6])+($silver*$tempArray[5])+( $silver*$tempArray[4]);

标签: php arrays json object


【解决方案1】:

mysqli_fetch_object 返回一个对象。

所以$row=mysqli_fetch_object($result) 之后是一个对象。

如果您想要一个数组,请改用mysqli_fetch_array

在使用该数组之前,请使用var_dump($row); 检查其内容(以防止进一步的问题)。

【讨论】:

    【解决方案2】:

    看看你是如何声明$score的。

    首先你做$scorex=array($row_cnt); 然后$score=(object)$scorex;

    所以$score 被强制转换为一个对象。但是,在您的代码中,您仍然像数组一样处理它,即$score[$counter]。您应该将其作为对象引用。

    编辑

    或者,将$score 的定义更新为以下内容:

     $score = array_fill (0, $row_cnt, 0);
    

    这样,您对$score[$counter] 的分配仍然有效(我认为按照您的意图)。

    【讨论】:

    • 我按照建议修改 $score[$counter]=($bronze*$tempArray->bronze)+($silver*$tempArray->silver)+($silver*$tempArray->gold );但仍然遇到同样的错误
    • 我不能使用 mysql_fetch_object,我必须使用 mysqli_fetch_object 或 $result->fetch_object() 但两者都得到相同的错误
    • 看看你是如何声明$score的。首先你做$scorex=array($row_cnt); 然后$score=(object)$scorex;。所以$score 被强制转换为一个对象。但是,在您的代码中,您仍然像数组一样处理它,即$score[$counter]。这也需要改变。
    • mysql_fetch_obj 已被弃用,所有 mysql_ 函数也是如此 - mysqli_fetch_obj 不是。
    • @ryan...感谢您的回复,但您介意告诉我们如何更改它以使其正常工作
    猜你喜欢
    • 2013-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 2014-07-18
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多