Cannot use object of type stdClass as array?
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{ height:90px;width:728px;box-sizing:border-box;
}
I get a strange error using json_decode()
. It decode correctly the data (I saw it using print_r
), but when I try to access to info inside the array I get:
Fatal error: Cannot use object of type stdClass as array in
C:UsersDailsoftwareabs.php on line 108
I only tried to do: $result['context']
where $result
has the data returned by json_decode()
How can I read values inside this array?
php json
add a comment |
I get a strange error using json_decode()
. It decode correctly the data (I saw it using print_r
), but when I try to access to info inside the array I get:
Fatal error: Cannot use object of type stdClass as array in
C:UsersDailsoftwareabs.php on line 108
I only tried to do: $result['context']
where $result
has the data returned by json_decode()
How can I read values inside this array?
php json
14
$result = json_decode('the string', true); Adding the true returns the result as an array and not an stdClass.
– Nepaluz
Apr 19 '16 at 20:12
add a comment |
I get a strange error using json_decode()
. It decode correctly the data (I saw it using print_r
), but when I try to access to info inside the array I get:
Fatal error: Cannot use object of type stdClass as array in
C:UsersDailsoftwareabs.php on line 108
I only tried to do: $result['context']
where $result
has the data returned by json_decode()
How can I read values inside this array?
php json
I get a strange error using json_decode()
. It decode correctly the data (I saw it using print_r
), but when I try to access to info inside the array I get:
Fatal error: Cannot use object of type stdClass as array in
C:UsersDailsoftwareabs.php on line 108
I only tried to do: $result['context']
where $result
has the data returned by json_decode()
How can I read values inside this array?
php json
php json
edited Nov 16 '18 at 12:22
Donald Duck
4,072134262
4,072134262
asked Jul 25 '11 at 11:40
DailDail
2,2242103
2,2242103
14
$result = json_decode('the string', true); Adding the true returns the result as an array and not an stdClass.
– Nepaluz
Apr 19 '16 at 20:12
add a comment |
14
$result = json_decode('the string', true); Adding the true returns the result as an array and not an stdClass.
– Nepaluz
Apr 19 '16 at 20:12
14
14
$result = json_decode('the string', true); Adding the true returns the result as an array and not an stdClass.
– Nepaluz
Apr 19 '16 at 20:12
$result = json_decode('the string', true); Adding the true returns the result as an array and not an stdClass.
– Nepaluz
Apr 19 '16 at 20:12
add a comment |
13 Answers
13
active
oldest
votes
Use the second parameter of json_decode
to make it return an array:
$result = json_decode($data, true);
add a comment |
The function json_decode()
returns an object by default.
You can access the data like this:
var_dump($result->context);
If you have identifiers like from-date
(the hyphen would cause a PHP error when using the above method) you have to write:
var_dump($result->{'from-date'});
If you want an array you can do something like this:
$result = json_decode($json, true);
Or cast the object to an array:
$result = (array) json_decode($json);
2
took me a while to find this when trying to find a way to refer to the _destroy value in php that's set by knockoutjs, so +1
– deltree
Mar 28 '12 at 2:47
1
This answer is much more qualified than first (most rated) answer!
– Mojtaba Rezaeian
Dec 5 '18 at 7:28
add a comment |
You must access it using ->
since its an object.
Change your code from:
$result['context'];
To:
$result->context;
The problem I have is trying to use the property in a conditionalif ($result->context = $var)
This causes the property to be set to the var and returns true, no matter.
– STWilson
Nov 16 '16 at 21:28
1
@STWilson you should be using a double equals==
, in your current state you are assigning$var
value to$result->context
by using a single equal=
. And theif statement
will read it as if it is empty or not, and if the$var
has value then that means it is not empty and will always return true.
– JiNexus
Nov 16 '16 at 23:26
Thanks! This should be marked as the correct answer...
– Roberto
Sep 2 '17 at 22:56
add a comment |
Use true
as the second parameter to json_decode
. This will decode the json into an associative array instead of stdObject
instances:
$my_array = json_decode($my_json, true);
See the documentation for more details.
add a comment |
Have same problem today, solved like this:
If you call json_decode($somestring)
you will get an Object and you need to access like $object->key
, but if u call json_decode($somestring, true)
you will get an dictionary and can access like $array['key']
1
This saved me sooo much time! I was not putting in the true parameter, and trying to access it as an array
– Meeyam
Dec 7 '18 at 23:07
add a comment |
It's not an array, it's an object of type stdClass.
You can access it like this:
echo $oResult->context;
More info here: What is stdClass in PHP?
add a comment |
As the Php Manual say,
print_r — Prints human-readable information about a variable
When we use json_decode();
, we get an object of type stdClass as return type.
The arguments, which are to be passed inside of print_r()
should either be an array or a string. Hence, we cannot pass an object inside of print_r()
. I found 2 ways to deal with this.
Cast the object to array.
This can be achieved as follows.
$a = (array)$object;
By accessing the key of the Object
As mentioned earlier, when you usejson_decode();
function, it returns an Object of stdClass. you can access the elements of the object with the help of->
Operator.
$value = $object->key;
One, can also use multiple keys to extract the sub elements incase if the object has nested arrays.
$value = $object->key1->key2->key3...;
Their are other options to print_r()
as well, like var_dump();
and var_export();
P.S : Also, If you set the second parameter of the json_decode();
to true
, it will automatically convert the object to an array();
Here are some references:
http://php.net/manual/en/function.print-r.php
http://php.net/manual/en/function.var-dump.php
http://php.net/manual/en/function.var-export.php
add a comment |
You can convert stdClass object to array like:
$array = (array)$stdClass;
stdClsss to array
add a comment |
Here is the function signature:
mixed json_decode ( string $json [, bool $assoc = false [, int $depth = 512 [, int $options = 0 ]]] )
When param is false, which is default, it will return an appropriate php type. You fetch the value of that type using object.method paradigm.
When param is true, it will return associative arrays.
It will return NULL on error.
If you want to fetch value through array, set assoc to true.
add a comment |
When you try to access it as $result['context']
, you treating it as an array, the error it's telling you that you are actually dealing with an object, then you should access it as $result->context
add a comment |
instead of using the brackets use the object operator for example my array based on database object is created like this in a class called 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;
}
}
to access the information I use this code on the controller script:
<?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';
?>
then to display the information I check to see if servicecalls has been set and has a count greater than 0 remember it's not an array I am referencing so I access the records with the object operator "->" like this:
<?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'; ?>
add a comment |
I got this error out of the blue because my facebook login suddently stopped working (I had also changed hosts) and throwed this error. The fix is really easy
The issue was in this code
$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']);
}
Basically isset() function expect an array but instead it find an object. The simple solution is to convert PHP object to array using (array) quantifier. The following is the fixed code.
$response = (array) (new FacebookRequest(
FacebookSession::newAppSession($this->appId, $this->appSecret),
'GET',
'/oauth/access_token',
$params
))->execute()->getResponse(true);
Note the use off array() quantifier in first line.
add a comment |
Change it for
$results->fetch_array()
add a comment |
protected by Community♦ Oct 3 '18 at 15:05
Thank you for your interest in this question.
Because it has attracted low-quality or spam answers that had to be removed, posting an answer now requires 10 reputation on this site (the association bonus does not count).
Would you like to answer one of these unanswered questions instead?
13 Answers
13
active
oldest
votes
13 Answers
13
active
oldest
votes
active
oldest
votes
active
oldest
votes
Use the second parameter of json_decode
to make it return an array:
$result = json_decode($data, true);
add a comment |
Use the second parameter of json_decode
to make it return an array:
$result = json_decode($data, true);
add a comment |
Use the second parameter of json_decode
to make it return an array:
$result = json_decode($data, true);
Use the second parameter of json_decode
to make it return an array:
$result = json_decode($data, true);
edited Feb 3 '14 at 21:08
answered Jul 25 '11 at 11:43
JonJon
348k60613719
348k60613719
add a comment |
add a comment |
The function json_decode()
returns an object by default.
You can access the data like this:
var_dump($result->context);
If you have identifiers like from-date
(the hyphen would cause a PHP error when using the above method) you have to write:
var_dump($result->{'from-date'});
If you want an array you can do something like this:
$result = json_decode($json, true);
Or cast the object to an array:
$result = (array) json_decode($json);
2
took me a while to find this when trying to find a way to refer to the _destroy value in php that's set by knockoutjs, so +1
– deltree
Mar 28 '12 at 2:47
1
This answer is much more qualified than first (most rated) answer!
– Mojtaba Rezaeian
Dec 5 '18 at 7:28
add a comment |
The function json_decode()
returns an object by default.
You can access the data like this:
var_dump($result->context);
If you have identifiers like from-date
(the hyphen would cause a PHP error when using the above method) you have to write:
var_dump($result->{'from-date'});
If you want an array you can do something like this:
$result = json_decode($json, true);
Or cast the object to an array:
$result = (array) json_decode($json);
2
took me a while to find this when trying to find a way to refer to the _destroy value in php that's set by knockoutjs, so +1
– deltree
Mar 28 '12 at 2:47
1
This answer is much more qualified than first (most rated) answer!
– Mojtaba Rezaeian
Dec 5 '18 at 7:28
add a comment |
The function json_decode()
returns an object by default.
You can access the data like this:
var_dump($result->context);
If you have identifiers like from-date
(the hyphen would cause a PHP error when using the above method) you have to write:
var_dump($result->{'from-date'});
If you want an array you can do something like this:
$result = json_decode($json, true);
Or cast the object to an array:
$result = (array) json_decode($json);
The function json_decode()
returns an object by default.
You can access the data like this:
var_dump($result->context);
If you have identifiers like from-date
(the hyphen would cause a PHP error when using the above method) you have to write:
var_dump($result->{'from-date'});
If you want an array you can do something like this:
$result = json_decode($json, true);
Or cast the object to an array:
$result = (array) json_decode($json);
answered Jul 25 '11 at 11:44
svenssvens
9,13052953
9,13052953
2
took me a while to find this when trying to find a way to refer to the _destroy value in php that's set by knockoutjs, so +1
– deltree
Mar 28 '12 at 2:47
1
This answer is much more qualified than first (most rated) answer!
– Mojtaba Rezaeian
Dec 5 '18 at 7:28
add a comment |
2
took me a while to find this when trying to find a way to refer to the _destroy value in php that's set by knockoutjs, so +1
– deltree
Mar 28 '12 at 2:47
1
This answer is much more qualified than first (most rated) answer!
– Mojtaba Rezaeian
Dec 5 '18 at 7:28
2
2
took me a while to find this when trying to find a way to refer to the _destroy value in php that's set by knockoutjs, so +1
– deltree
Mar 28 '12 at 2:47
took me a while to find this when trying to find a way to refer to the _destroy value in php that's set by knockoutjs, so +1
– deltree
Mar 28 '12 at 2:47
1
1
This answer is much more qualified than first (most rated) answer!
– Mojtaba Rezaeian
Dec 5 '18 at 7:28
This answer is much more qualified than first (most rated) answer!
– Mojtaba Rezaeian
Dec 5 '18 at 7:28
add a comment |
You must access it using ->
since its an object.
Change your code from:
$result['context'];
To:
$result->context;
The problem I have is trying to use the property in a conditionalif ($result->context = $var)
This causes the property to be set to the var and returns true, no matter.
– STWilson
Nov 16 '16 at 21:28
1
@STWilson you should be using a double equals==
, in your current state you are assigning$var
value to$result->context
by using a single equal=
. And theif statement
will read it as if it is empty or not, and if the$var
has value then that means it is not empty and will always return true.
– JiNexus
Nov 16 '16 at 23:26
Thanks! This should be marked as the correct answer...
– Roberto
Sep 2 '17 at 22:56
add a comment |
You must access it using ->
since its an object.
Change your code from:
$result['context'];
To:
$result->context;
The problem I have is trying to use the property in a conditionalif ($result->context = $var)
This causes the property to be set to the var and returns true, no matter.
– STWilson
Nov 16 '16 at 21:28
1
@STWilson you should be using a double equals==
, in your current state you are assigning$var
value to$result->context
by using a single equal=
. And theif statement
will read it as if it is empty or not, and if the$var
has value then that means it is not empty and will always return true.
– JiNexus
Nov 16 '16 at 23:26
Thanks! This should be marked as the correct answer...
– Roberto
Sep 2 '17 at 22:56
add a comment |
You must access it using ->
since its an object.
Change your code from:
$result['context'];
To:
$result->context;
You must access it using ->
since its an object.
Change your code from:
$result['context'];
To:
$result->context;
edited Jan 8 '16 at 6:09
SHAZ
2,35261827
2,35261827
answered May 15 '14 at 5:47
JiNexusJiNexus
1,90911416
1,90911416
The problem I have is trying to use the property in a conditionalif ($result->context = $var)
This causes the property to be set to the var and returns true, no matter.
– STWilson
Nov 16 '16 at 21:28
1
@STWilson you should be using a double equals==
, in your current state you are assigning$var
value to$result->context
by using a single equal=
. And theif statement
will read it as if it is empty or not, and if the$var
has value then that means it is not empty and will always return true.
– JiNexus
Nov 16 '16 at 23:26
Thanks! This should be marked as the correct answer...
– Roberto
Sep 2 '17 at 22:56
add a comment |
The problem I have is trying to use the property in a conditionalif ($result->context = $var)
This causes the property to be set to the var and returns true, no matter.
– STWilson
Nov 16 '16 at 21:28
1
@STWilson you should be using a double equals==
, in your current state you are assigning$var
value to$result->context
by using a single equal=
. And theif statement
will read it as if it is empty or not, and if the$var
has value then that means it is not empty and will always return true.
– JiNexus
Nov 16 '16 at 23:26
Thanks! This should be marked as the correct answer...
– Roberto
Sep 2 '17 at 22:56
The problem I have is trying to use the property in a conditional
if ($result->context = $var)
This causes the property to be set to the var and returns true, no matter.– STWilson
Nov 16 '16 at 21:28
The problem I have is trying to use the property in a conditional
if ($result->context = $var)
This causes the property to be set to the var and returns true, no matter.– STWilson
Nov 16 '16 at 21:28
1
1
@STWilson you should be using a double equals
==
, in your current state you are assigning $var
value to $result->context
by using a single equal =
. And the if statement
will read it as if it is empty or not, and if the $var
has value then that means it is not empty and will always return true.– JiNexus
Nov 16 '16 at 23:26
@STWilson you should be using a double equals
==
, in your current state you are assigning $var
value to $result->context
by using a single equal =
. And the if statement
will read it as if it is empty or not, and if the $var
has value then that means it is not empty and will always return true.– JiNexus
Nov 16 '16 at 23:26
Thanks! This should be marked as the correct answer...
– Roberto
Sep 2 '17 at 22:56
Thanks! This should be marked as the correct answer...
– Roberto
Sep 2 '17 at 22:56
add a comment |
Use true
as the second parameter to json_decode
. This will decode the json into an associative array instead of stdObject
instances:
$my_array = json_decode($my_json, true);
See the documentation for more details.
add a comment |
Use true
as the second parameter to json_decode
. This will decode the json into an associative array instead of stdObject
instances:
$my_array = json_decode($my_json, true);
See the documentation for more details.
add a comment |
Use true
as the second parameter to json_decode
. This will decode the json into an associative array instead of stdObject
instances:
$my_array = json_decode($my_json, true);
See the documentation for more details.
Use true
as the second parameter to json_decode
. This will decode the json into an associative array instead of stdObject
instances:
$my_array = json_decode($my_json, true);
See the documentation for more details.
answered Jul 25 '11 at 11:42
Sander MarechalSander Marechal
19.1k95483
19.1k95483
add a comment |
add a comment |
Have same problem today, solved like this:
If you call json_decode($somestring)
you will get an Object and you need to access like $object->key
, but if u call json_decode($somestring, true)
you will get an dictionary and can access like $array['key']
1
This saved me sooo much time! I was not putting in the true parameter, and trying to access it as an array
– Meeyam
Dec 7 '18 at 23:07
add a comment |
Have same problem today, solved like this:
If you call json_decode($somestring)
you will get an Object and you need to access like $object->key
, but if u call json_decode($somestring, true)
you will get an dictionary and can access like $array['key']
1
This saved me sooo much time! I was not putting in the true parameter, and trying to access it as an array
– Meeyam
Dec 7 '18 at 23:07
add a comment |
Have same problem today, solved like this:
If you call json_decode($somestring)
you will get an Object and you need to access like $object->key
, but if u call json_decode($somestring, true)
you will get an dictionary and can access like $array['key']
Have same problem today, solved like this:
If you call json_decode($somestring)
you will get an Object and you need to access like $object->key
, but if u call json_decode($somestring, true)
you will get an dictionary and can access like $array['key']
edited Oct 25 '17 at 9:49
answered Jan 11 '16 at 17:37
Alexey LysenkoAlexey Lysenko
945719
945719
1
This saved me sooo much time! I was not putting in the true parameter, and trying to access it as an array
– Meeyam
Dec 7 '18 at 23:07
add a comment |
1
This saved me sooo much time! I was not putting in the true parameter, and trying to access it as an array
– Meeyam
Dec 7 '18 at 23:07
1
1
This saved me sooo much time! I was not putting in the true parameter, and trying to access it as an array
– Meeyam
Dec 7 '18 at 23:07
This saved me sooo much time! I was not putting in the true parameter, and trying to access it as an array
– Meeyam
Dec 7 '18 at 23:07
add a comment |
It's not an array, it's an object of type stdClass.
You can access it like this:
echo $oResult->context;
More info here: What is stdClass in PHP?
add a comment |
It's not an array, it's an object of type stdClass.
You can access it like this:
echo $oResult->context;
More info here: What is stdClass in PHP?
add a comment |
It's not an array, it's an object of type stdClass.
You can access it like this:
echo $oResult->context;
More info here: What is stdClass in PHP?
It's not an array, it's an object of type stdClass.
You can access it like this:
echo $oResult->context;
More info here: What is stdClass in PHP?
edited May 23 '17 at 12:26
Community♦
11
11
answered Jul 25 '11 at 11:42
Wesley van OpdorpWesley van Opdorp
13k43457
13k43457
add a comment |
add a comment |
As the Php Manual say,
print_r — Prints human-readable information about a variable
When we use json_decode();
, we get an object of type stdClass as return type.
The arguments, which are to be passed inside of print_r()
should either be an array or a string. Hence, we cannot pass an object inside of print_r()
. I found 2 ways to deal with this.
Cast the object to array.
This can be achieved as follows.
$a = (array)$object;
By accessing the key of the Object
As mentioned earlier, when you usejson_decode();
function, it returns an Object of stdClass. you can access the elements of the object with the help of->
Operator.
$value = $object->key;
One, can also use multiple keys to extract the sub elements incase if the object has nested arrays.
$value = $object->key1->key2->key3...;
Their are other options to print_r()
as well, like var_dump();
and var_export();
P.S : Also, If you set the second parameter of the json_decode();
to true
, it will automatically convert the object to an array();
Here are some references:
http://php.net/manual/en/function.print-r.php
http://php.net/manual/en/function.var-dump.php
http://php.net/manual/en/function.var-export.php
add a comment |
As the Php Manual say,
print_r — Prints human-readable information about a variable
When we use json_decode();
, we get an object of type stdClass as return type.
The arguments, which are to be passed inside of print_r()
should either be an array or a string. Hence, we cannot pass an object inside of print_r()
. I found 2 ways to deal with this.
Cast the object to array.
This can be achieved as follows.
$a = (array)$object;
By accessing the key of the Object
As mentioned earlier, when you usejson_decode();
function, it returns an Object of stdClass. you can access the elements of the object with the help of->
Operator.
$value = $object->key;
One, can also use multiple keys to extract the sub elements incase if the object has nested arrays.
$value = $object->key1->key2->key3...;
Their are other options to print_r()
as well, like var_dump();
and var_export();
P.S : Also, If you set the second parameter of the json_decode();
to true
, it will automatically convert the object to an array();
Here are some references:
http://php.net/manual/en/function.print-r.php
http://php.net/manual/en/function.var-dump.php
http://php.net/manual/en/function.var-export.php
add a comment |
As the Php Manual say,
print_r — Prints human-readable information about a variable
When we use json_decode();
, we get an object of type stdClass as return type.
The arguments, which are to be passed inside of print_r()
should either be an array or a string. Hence, we cannot pass an object inside of print_r()
. I found 2 ways to deal with this.
Cast the object to array.
This can be achieved as follows.
$a = (array)$object;
By accessing the key of the Object
As mentioned earlier, when you usejson_decode();
function, it returns an Object of stdClass. you can access the elements of the object with the help of->
Operator.
$value = $object->key;
One, can also use multiple keys to extract the sub elements incase if the object has nested arrays.
$value = $object->key1->key2->key3...;
Their are other options to print_r()
as well, like var_dump();
and var_export();
P.S : Also, If you set the second parameter of the json_decode();
to true
, it will automatically convert the object to an array();
Here are some references:
http://php.net/manual/en/function.print-r.php
http://php.net/manual/en/function.var-dump.php
http://php.net/manual/en/function.var-export.php
As the Php Manual say,
print_r — Prints human-readable information about a variable
When we use json_decode();
, we get an object of type stdClass as return type.
The arguments, which are to be passed inside of print_r()
should either be an array or a string. Hence, we cannot pass an object inside of print_r()
. I found 2 ways to deal with this.
Cast the object to array.
This can be achieved as follows.
$a = (array)$object;
By accessing the key of the Object
As mentioned earlier, when you usejson_decode();
function, it returns an Object of stdClass. you can access the elements of the object with the help of->
Operator.
$value = $object->key;
One, can also use multiple keys to extract the sub elements incase if the object has nested arrays.
$value = $object->key1->key2->key3...;
Their are other options to print_r()
as well, like var_dump();
and var_export();
P.S : Also, If you set the second parameter of the json_decode();
to true
, it will automatically convert the object to an array();
Here are some references:
http://php.net/manual/en/function.print-r.php
http://php.net/manual/en/function.var-dump.php
http://php.net/manual/en/function.var-export.php
edited Mar 5 '16 at 13:41
answered Mar 5 '16 at 13:27
M.S.PM.S.P
1,42221324
1,42221324
add a comment |
add a comment |
You can convert stdClass object to array like:
$array = (array)$stdClass;
stdClsss to array
add a comment |
You can convert stdClass object to array like:
$array = (array)$stdClass;
stdClsss to array
add a comment |
You can convert stdClass object to array like:
$array = (array)$stdClass;
stdClsss to array
You can convert stdClass object to array like:
$array = (array)$stdClass;
stdClsss to array
edited May 23 '17 at 12:10
Community♦
11
11
answered Sep 9 '15 at 8:55
Arnab HoreArnab Hore
2,14811432
2,14811432
add a comment |
add a comment |
Here is the function signature:
mixed json_decode ( string $json [, bool $assoc = false [, int $depth = 512 [, int $options = 0 ]]] )
When param is false, which is default, it will return an appropriate php type. You fetch the value of that type using object.method paradigm.
When param is true, it will return associative arrays.
It will return NULL on error.
If you want to fetch value through array, set assoc to true.
add a comment |
Here is the function signature:
mixed json_decode ( string $json [, bool $assoc = false [, int $depth = 512 [, int $options = 0 ]]] )
When param is false, which is default, it will return an appropriate php type. You fetch the value of that type using object.method paradigm.
When param is true, it will return associative arrays.
It will return NULL on error.
If you want to fetch value through array, set assoc to true.
add a comment |
Here is the function signature:
mixed json_decode ( string $json [, bool $assoc = false [, int $depth = 512 [, int $options = 0 ]]] )
When param is false, which is default, it will return an appropriate php type. You fetch the value of that type using object.method paradigm.
When param is true, it will return associative arrays.
It will return NULL on error.
If you want to fetch value through array, set assoc to true.
Here is the function signature:
mixed json_decode ( string $json [, bool $assoc = false [, int $depth = 512 [, int $options = 0 ]]] )
When param is false, which is default, it will return an appropriate php type. You fetch the value of that type using object.method paradigm.
When param is true, it will return associative arrays.
It will return NULL on error.
If you want to fetch value through array, set assoc to true.
answered Oct 28 '15 at 8:23
robertrobert
168119
168119
add a comment |
add a comment |
When you try to access it as $result['context']
, you treating it as an array, the error it's telling you that you are actually dealing with an object, then you should access it as $result->context
add a comment |
When you try to access it as $result['context']
, you treating it as an array, the error it's telling you that you are actually dealing with an object, then you should access it as $result->context
add a comment |
When you try to access it as $result['context']
, you treating it as an array, the error it's telling you that you are actually dealing with an object, then you should access it as $result->context
When you try to access it as $result['context']
, you treating it as an array, the error it's telling you that you are actually dealing with an object, then you should access it as $result->context
edited Feb 8 '17 at 9:19
Tom
3,39562744
3,39562744
answered Feb 8 '17 at 9:11
Midas MtileniMidas Mtileni
414
414
add a comment |
add a comment |
instead of using the brackets use the object operator for example my array based on database object is created like this in a class called 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;
}
}
to access the information I use this code on the controller script:
<?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';
?>
then to display the information I check to see if servicecalls has been set and has a count greater than 0 remember it's not an array I am referencing so I access the records with the object operator "->" like this:
<?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'; ?>
add a comment |
instead of using the brackets use the object operator for example my array based on database object is created like this in a class called 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;
}
}
to access the information I use this code on the controller script:
<?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';
?>
then to display the information I check to see if servicecalls has been set and has a count greater than 0 remember it's not an array I am referencing so I access the records with the object operator "->" like this:
<?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'; ?>
add a comment |
instead of using the brackets use the object operator for example my array based on database object is created like this in a class called 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;
}
}
to access the information I use this code on the controller script:
<?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';
?>
then to display the information I check to see if servicecalls has been set and has a count greater than 0 remember it's not an array I am referencing so I access the records with the object operator "->" like this:
<?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'; ?>
instead of using the brackets use the object operator for example my array based on database object is created like this in a class called 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;
}
}
to access the information I use this code on the controller script:
<?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';
?>
then to display the information I check to see if servicecalls has been set and has a count greater than 0 remember it's not an array I am referencing so I access the records with the object operator "->" like this:
<?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'; ?>
edited Mar 7 '14 at 22:09
answered Mar 7 '14 at 22:00
timmac15timmac15
313
313
add a comment |
add a comment |
I got this error out of the blue because my facebook login suddently stopped working (I had also changed hosts) and throwed this error. The fix is really easy
The issue was in this code
$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']);
}
Basically isset() function expect an array but instead it find an object. The simple solution is to convert PHP object to array using (array) quantifier. The following is the fixed code.
$response = (array) (new FacebookRequest(
FacebookSession::newAppSession($this->appId, $this->appSecret),
'GET',
'/oauth/access_token',
$params
))->execute()->getResponse(true);
Note the use off array() quantifier in first line.
add a comment |
I got this error out of the blue because my facebook login suddently stopped working (I had also changed hosts) and throwed this error. The fix is really easy
The issue was in this code
$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']);
}
Basically isset() function expect an array but instead it find an object. The simple solution is to convert PHP object to array using (array) quantifier. The following is the fixed code.
$response = (array) (new FacebookRequest(
FacebookSession::newAppSession($this->appId, $this->appSecret),
'GET',
'/oauth/access_token',
$params
))->execute()->getResponse(true);
Note the use off array() quantifier in first line.
add a comment |
I got this error out of the blue because my facebook login suddently stopped working (I had also changed hosts) and throwed this error. The fix is really easy
The issue was in this code
$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']);
}
Basically isset() function expect an array but instead it find an object. The simple solution is to convert PHP object to array using (array) quantifier. The following is the fixed code.
$response = (array) (new FacebookRequest(
FacebookSession::newAppSession($this->appId, $this->appSecret),
'GET',
'/oauth/access_token',
$params
))->execute()->getResponse(true);
Note the use off array() quantifier in first line.
I got this error out of the blue because my facebook login suddently stopped working (I had also changed hosts) and throwed this error. The fix is really easy
The issue was in this code
$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']);
}
Basically isset() function expect an array but instead it find an object. The simple solution is to convert PHP object to array using (array) quantifier. The following is the fixed code.
$response = (array) (new FacebookRequest(
FacebookSession::newAppSession($this->appId, $this->appSecret),
'GET',
'/oauth/access_token',
$params
))->execute()->getResponse(true);
Note the use off array() quantifier in first line.
edited Aug 10 '17 at 4:46
answered Jul 20 '17 at 15:44
Hammad KhanHammad Khan
9,3261287112
9,3261287112
add a comment |
add a comment |
Change it for
$results->fetch_array()
add a comment |
Change it for
$results->fetch_array()
add a comment |
Change it for
$results->fetch_array()
Change it for
$results->fetch_array()
answered Jul 5 '17 at 1:08
Dan PadillaDan Padilla
132
132
add a comment |
add a comment |
protected by Community♦ Oct 3 '18 at 15:05
Thank you for your interest in this question.
Because it has attracted low-quality or spam answers that had to be removed, posting an answer now requires 10 reputation on this site (the association bonus does not count).
Would you like to answer one of these unanswered questions instead?
14
$result = json_decode('the string', true); Adding the true returns the result as an array and not an stdClass.
– Nepaluz
Apr 19 '16 at 20:12