stdClass 유형의 개체를 어레이로 사용할 수 없습니까?
를 사용하면 이상한 오류가 발생합니다.json_decode()
'복호화'로 봤어요).print_r
)는 다음과 같이 됩니다. : ) 。
Fatal error: Cannot use object of type stdClass as array in
C:\Users\Dail\software\abs.php on line 108
는 단지 뿐이다:$result['context']
서 ''는$result
에는 반환된 .json_decode()
이 어레이 내의 값을 읽으려면 어떻게 해야 합니까?
의 두 번째 파라미터를 사용하여 배열을 반환합니다.
$result = json_decode($data, true);
이 함수는 기본적으로 개체를 반환합니다.
다음과 같이 데이터에 액세스할 수 있습니다.
var_dump($result->context);
다음과 같은 식별자가 있는 경우from-date
으로 인해 PHP 합니다.) 같이 . (PHP 오류는 PHP에 의해 발생합니다.)
var_dump($result->{'from-date'});
어레이가 필요한 경우 다음과 같은 작업을 수행할 수 있습니다.
$result = json_decode($json, true);
또는 개체를 배열에 캐스팅합니다.
$result = (array) json_decode($json);
개체이므로 를 사용하여 액세스해야 합니다.
코드 변경처:
$result['context'];
수신인:
$result->context;
true
로서 「」를 참조해 주세요.json_decode
하면 이 .json이 .stdObject
★★★★★★★★★★★★★★★★★★:
$my_array = json_decode($my_json, true);
상세한 것에 대하여는, 메뉴얼을 참조해 주세요.
오늘도 같은 문제가 발생하고, 다음과 같이 해결됩니다.
「 」에 json_decode($somestring)
, '하다'와 같이 접속해야 .$object->key
, " " 를 하면 " " 입니다json_decode($somestring, true)
, 사전이 있고, 사전이 있다, 사전이 있다, 이 있다, 이 있다, 사전이 있다,$array['key']
어레이가 아니라 stdClass 유형의 객체입니다.
다음과 같이 액세스 할 수 있습니다.
echo $oResult->context;
자세한 내용은 이쪽:PHP의 stdClass란 무엇입니까?
Php 매뉴얼에서 말하는 것처럼
: 에 대한 판독 를 인쇄합니다.
★★★★★★를 사용하는 경우json_decode();
typestdClass의 가 stdClass로 논거, , , 논거, 논거, 논거, 논거, 논거, 논거, 논거, 논거, 논거, 논거, 논거, 논거, 논거, 논거 등.print_r()
배열 또는 문자열이어야 합니다. 때문에할 수 .print_r()
이 문제를 해결할 방법을 두 가지 찾았습니다.
이치노
이것은 다음과 같이 달성할 수 있습니다.$a = (array)$object;
에
한 바와 같이 ""를 사용하는json_decode();
는 객체의 에 접근할 수 있습니다.->
환입니니다다$value = $object->key;
하나는 오브젝트에 중첩된 배열이 있는 경우 여러 키를 사용하여 하위 요소를 추출할 수도 있습니다.
$value = $object->key1->key2->key3...;
다른 옵션으로는print_r()
마찬가지로var_dump();
★★★★★★★★★★★★★★★★★」var_export();
P.S: 또, 의 두 번째 파라미터를 설정했을 경우json_decode();
로로 합니다.true
으로 변환됩니다.array();
뭇매를 맞다
http://php.net/manual/en/function.print-r.phphttpphp.net/manual/en/.print-r.php
http://php.net/manual/en/function.var-dump.phphttpphp.net/manual/en/function..php
http://php.net/manual/en/function.var-export.phphttpphp.net/manual/en/function..php
이런 거 먹어봐!
다음과 같은 콘텍스트를 얻는 대신 (어레이 인덱스를 가져오는 데 효과적임)
$result['context']
try (이 작업은 오브젝트를 가져오는 작업)
$result->context
기타 예는 다음과 같습니다(데이터 값이 여러 개인 경우).
Array
(
[0] => stdClass Object
(
[id] => 15
[name] => 1 Pc Meal
[context] => 5
[restaurant_id] => 2
[items] =>
[details] => 1 Thigh (or 2 Drums) along with Taters
[nutrition_fact] => {"":""}
[servings] => menu
[availability] => 1
[has_discount] => {"menu":0}
[price] => {"menu":"8.03"}
[discounted_price] => {"menu":""}
[thumbnail] => YPenWSkFZm2BrJT4637o.jpg
[slug] => 1-pc-meal
[created_at] => 1612290600
[updated_at] => 1612463400
)
)
그럼 이렇게 해 보세요.
foreach($result as $results)
{
$results->context;
}
json 문자열에서 결과로 어레이를 가져오려면 두 번째 매개 변수를 boolean true로 설정해야 합니다.
$result = json_decode($json_string, true);
$context = $result['context'];
그렇지 않으면 $result는 std 객체가 되지만 객체로 값에 액세스할 수 있습니다.
$result = json_decode($json_string);
$context = $result->context;
API를 사용할 때 객체를 단순히 객체로 유지하고 싶을 때가 있습니다.중첩된 개체가 있는 개체에 액세스하려면 다음을 수행합니다.
오브젝트를 print_r 할 때 다음과 같이 표시될 수 있습니다.
print_r($response);
stdClass object
(
[status] => success
[message] => Some message from the data
[0] => stdClass object
(
[first] => Robert
[last] => Saylor
[title] => Symfony Developer
)
[1] => stdClass object
(
[country] => USA
)
)
개체의 첫 번째 부분에 액세스하려면:
print $response->{'status'};
그러면 "성공"을 얻을 수 있습니다.
이제 다른 부분에 대해 설명하겠습니다.
$first = $response->{0}->{'first'};
print "First name: {$first}<br>";
예상되는 출력은 줄 바꿈이 있는 "Robert"입니다.
개체의 일부를 다른 개체에 다시 할당할 수도 있습니다.
$contact = $response->{0};
print "First Name: " . $contact->{'first'} . "<br>";
예상되는 출력은 줄 바꿈이 있는 "Robert"입니다.
다음 키 "1"에 액세스하기 위한 프로세스는 동일합니다.
print "Country: " . $response->{1}->{'country'} . "<br>";
예상되는 출력은 "USA"입니다.
이것이 오브젝트와 오브젝트를 유지하는 이유를 이해하는 데 도움이 되기를 바랍니다.속성에 액세스하기 위해 개체를 배열로 변환할 필요는 없습니다.
다음과 같이 stdClass 개체를 배열로 변환할 수 있습니다.
$array = (array)$stdClass;
「」로서 하려고 했을 .$result['context']
은 실제로입니다. 그 는 '사물을 다루고 있다', '사물을 다루고 있다', '사물을 다루고 있다', '사물을 있다그러면 오브젝트에 액세스 할 필요가 있습니다.$result->context
함수 시그니처는 다음과 같습니다.
mixed json_decode ( string $json [, bool $assoc = false [, int $depth = 512 [, int $options = 0 ]]] )
param이 false(기본값)일 경우 적절한 php 유형을 반환합니다.개체를 사용하여 해당 유형의 값을 가져옵니다.메서드 패러다임
param이 true이면 관련 배열을 반환합니다.
에러시에 NULL이 반환됩니다.
어레이를 통해 값을 가져오려면 assoc를 true로 설정합니다.
facebook 로그인이 갑자기 정지되어(호스트도 변경) 이 에러가 발생했습니다.수정은 매우 쉽다.
이 코드에 문제가 있습니다.
$response = (new FacebookRequest(
FacebookSession::newAppSession($this->appId, $this->appSecret),
'GET',
'/oauth/access_token',
$params
))->execute()->getResponse(true);
if (isset($response['access_token'])) { <---- this line gave error
return new FacebookSession($response['access_token']);
}
기본적으로 isset() 함수는 배열을 예상하지만 대신 객체를 찾습니다.간단한 해결책은 (어레이) 수량자를 사용하여 PHP 개체를 배열로 변환하는 것입니다.다음은 고정 코드입니다.
$response = (array) (new FacebookRequest(
FacebookSession::newAppSession($this->appId, $this->appSecret),
'GET',
'/oauth/access_token',
$params
))->execute()->getResponse(true);
첫 번째 줄에 off array() 수량자를 사용합니다.
괄호를 사용하는 대신 오브젝트 연산자를 사용합니다.예를 들어 데이터베이스 오브젝트를 기반으로 한 배열은 DB라는 클래스에서 다음과 같이 생성됩니다.
class DB {
private static $_instance = null;
private $_pdo,
$_query,
$_error = false,
$_results,
$_count = 0;
private function __construct() {
try{
$this->_pdo = new PDO('mysql:host=' . Config::get('mysql/host') .';dbname=' . Config::get('mysql/db') , Config::get('mysql/username') ,Config::get('mysql/password') );
} catch(PDOException $e) {
$this->_error = true;
$newsMessage = 'Sorry. Database is off line';
$pagetitle = 'Teknikal Tim - Database Error';
$pagedescription = 'Teknikal Tim Database Error page';
include_once 'dbdown.html.php';
exit;
}
$headerinc = 'header.html.php';
}
public static function getInstance() {
if(!isset(self::$_instance)) {
self::$_instance = new DB();
}
return self::$_instance;
}
public function query($sql, $params = array()) {
$this->_error = false;
if($this->_query = $this->_pdo->prepare($sql)) {
$x = 1;
if(count($params)) {
foreach($params as $param){
$this->_query->bindValue($x, $param);
$x++;
}
}
}
if($this->_query->execute()) {
$this->_results = $this->_query->fetchAll(PDO::FETCH_OBJ);
$this->_count = $this->_query->rowCount();
}
else{
$this->_error = true;
}
return $this;
}
public function action($action, $table, $where = array()) {
if(count($where) ===3) {
$operators = array('=', '>', '<', '>=', '<=');
$field = $where[0];
$operator = $where[1];
$value = $where[2];
if(in_array($operator, $operators)) {
$sql = "{$action} FROM {$table} WHERE {$field} = ?";
if(!$this->query($sql, array($value))->error()) {
return $this;
}
}
}
return false;
}
public function get($table, $where) {
return $this->action('SELECT *', $table, $where);
public function results() {
return $this->_results;
}
public function first() {
return $this->_results[0];
}
public function count() {
return $this->_count;
}
}
컨트롤러 스크립트에서 다음 코드를 사용합니다.
<?php
$pagetitle = 'Teknikal Tim - Service Call Reservation';
$pagedescription = 'Teknikal Tim Sevice Call Reservation Page';
require_once $_SERVER['DOCUMENT_ROOT'] .'/core/init.php';
$newsMessage = 'temp message';
$servicecallsdb = DB::getInstance()->get('tt_service_calls', array('UserID',
'=','$_SESSION['UserID']));
if(!$servicecallsdb) {
// $servicecalls[] = array('ID'=>'','ServiceCallDescription'=>'No Service Calls');
} else {
$servicecalls = $servicecallsdb->results();
}
include 'servicecalls.html.php';
?>
다음으로 servicecalls가 설정되어 있고 카운트가0보다 큰지 여부를 확인하기 위해 체크하는 정보는 참조하는 배열이 아니기 때문에 오브젝트 연산자 "->"에서 다음과 같이 레코드에 액세스합니다.
<?php include $_SERVER['DOCUMENT_ROOT'] .'/includes/header.html.php';?>
<!--Main content-->
<div id="mainholder"> <!-- div so that page footer can have a minum height from the
header -->
<h1><?php if(isset($pagetitle)) htmlout($pagetitle);?></h1>
<br>
<br>
<article>
<h2></h2>
</article>
<?php
if (isset($servicecalls)) {
if (count ($servicecalls) > 0){
foreach ($servicecalls as $servicecall) {
echo '<a href="/servicecalls/?servicecall=' .$servicecall->ID .'">'
.$servicecall->ServiceCallDescription .'</a>';
}
}else echo 'No service Calls';
}
?>
<a href="/servicecalls/?new=true">Raise New Service Call</a>
</div> <!-- Main content end-->
<?php include $_SERVER['DOCUMENT_ROOT'] .'/includes/footer.html.php'; ?>
다음으로 변경하다
$results->fetch_array()
언급URL : https://stackoverflow.com/questions/6815520/cannot-use-object-of-type-stdclass-as-array
'source' 카테고리의 다른 글
LIKE 와일드카드를 사용하여 열에서 검색(대문자와 소문자를 구분하지 않음)하려면 어떻게 해야 합니까? (0) | 2022.11.05 |
---|---|
Chrome-devtools에서 실제로 모든 JS 소스를 검색할 수 있습니까? (0) | 2022.11.05 |
$_COOK 접근setcookie() 직후 IE (0) | 2022.11.05 |
Ubuntu 18.04에서 MariaDB 10.01을 완전히 삭제합니다. (0) | 2022.11.05 |
목록 항목의 역순 (0) | 2022.10.27 |