2013-05-15 3 views
0

나는 아래에 도움이 필요하다, 나는 그것의 과거에 제기 된 것을 알고있다. 그러나 나는 현재 그것을 알아 내는데 어려움을 겪고있다. stdClass 객체를 라인의 배열로 사용할 수 없다.PHP 치명적인 오류 : 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(); 

    ?> 
+0

왜 라인을 포함시키지 않았습니까? –

+0

아래에 내가 오류가 발생했습니다. $ score [$ counter] = ($ bronze * $ tempArray [6]) + ($ silver * $ tempArray [5]) + ($ silver * $ tempArray [ 4]); –

답변

1

$score을 어떻게 선언했는지 살펴보십시오.

먼저 $scorex=array($row_cnt);을 입력 한 다음 $score=(object)$scorex;을 입력하십시오.

따라서 $score이 개체에 캐스트됩니다. 그러나 코드에서 여전히 배열처럼 주소를 지정하고 있습니다 (예 : $score[$counter]). 객체로 참조해야합니다.

편집

또는 다음에 $score 대한 정의를 갱신 :

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

이 방법은, $score[$counter]에 과제가 여전히 작동합니다 (난 당신이 의도 한 방법으로 생각한다).

+0

나는 조언대로 수정한다. $ score [$ counter] = ($ bronze * $ tempArray-> bronze) + ($ silver * $ tempArray-> silver) + ($ silver * $ tempArray-> gold); 하지만 아직도 내가 mysql_fetch_object을 사용할 수 없습니다 같은 오류 –

+0

을 받고, 내가 mysqli_fetch_object 또는 $에서 그 결과> fetch_object을 (사용)하지만 모두가 당신이 $의 score''선언 방법을 살펴 –

+0

같은 오류가 발생을합니다. 먼저'$ scorex = array ($ row_cnt);와'$ score = (object) $ scorex; '를 수행합니다. 그래서'$ score'는 객체에 캐스트됩니다. 그러나 코드에서 여전히 배열처럼 '$ score [$ counter]'와 같은 주소를 지정합니다. 그것도 변화해야합니다. – Ryan

2

mysqli_fetch_object이 개체를 반환합니다.

따라서 $row=mysqli_fetch_object($result) 행의 개체입니다.

배열을 원하면 mysqli_fetch_array을 대신 사용하십시오.

그리고 그 배열을 사용하기 전에 추가 질문을하지 않기 위해 var_dump($row);으로 내용을 확인하십시오.

관련 문제