Get first element in PHP stdObject
PhpObjectMultidimensional ArrayPhp Problem Overview
I have an object (stored as $videos) that looks like this
object(stdClass)#19 (3) {
[0]=>
object(stdClass)#20 (22) {
["id"]=>
string(1) "123"
etc...
I want to get the ID of just that first element, without having to loop over it.
If it were an array, I would do this:
$videos[0]['id']
It used to work as this:
$videos[0]->id
But now I get an error "Cannot use object of type stdClass as array..." on the line shown above. Possibly due to a PHP upgrade.
So how do I get to that first ID without looping? Is it possible?
Thanks!
Php Solutions
Solution 1 - Php
Both array() and the stdClass objects can be accessed using the
current()
key()
next()
prev()
reset()
end()
functions.
So, if your object looks like
object(stdClass)#19 (3) {
[0]=>
object(stdClass)#20 (22) {
["id"]=>
string(1) "123"
etc...
Then you can just do;
$id = reset($obj)->id; //Gets the 'id' attr of the first entry in the object
If you need the key for some reason, you can do;
reset($obj); //Ensure that we're at the first element
$key = key($obj);
Hope that works for you. :-) No errors, even in super-strict mode, on PHP 5.4
Solution 2 - Php
Update PHP 7.4
Curly brace access syntax is deprecated since PHP 7.4
Update 2019
> Moving on to the best practices of OOPS, @MrTrick's answer must be > marked as correct, although my answer provides a hacked solution its not > the best method.
Simply iterate its using {}
Example:
$videos{0}->id
This way your object is not destroyed and you can easily iterate through object.
For PHP 5.6 and below use this
$videos{0}['id']
Solution 3 - Php
much easier:
$firstProp = current( (Array)$object );
Solution 4 - Php
Correct:
$videos= (Array)$videos;
$video = $videos[0];
Solution 5 - Php
$videos->{0}->id
worked for me.
Since $videos and {0} both are objects, so we have to access id with $videos->{0}->id
. The curly braces are required around 0, as omitting the braces will produce a syntax error : unexpected '0', expecting identifier or variable or '{' or '$'.
I'm using PHP 5.4.3.
In my case, neither $videos{0}->id
and $videos{0}['id']
worked and shows error :
Cannot use object of type stdClass as array.
Solution 6 - Php
You could loop on the object maybe and break in the first loop... Something like
foreach($obj as $prop) {
$first_prop = $prop;
break; // exits the foreach loop
}
Solution 7 - Php
Playing with Php interactive shell, Php 7:
ā ~ php -a
Interactive shell
php > $v = (object) ["toto" => "hello"];
php > var_dump($v);
object(stdClass)#1 (1) {
["toto"]=>
string(5) "hello"
}
php > echo $v{0};
PHP Warning: Uncaught Error: Cannot use object of type stdClass as array in php shell code:1
Stack trace:
#0 {main}
thrown in php shell code on line 1
Warning: Uncaught Error: Cannot use object of type stdClass as array in php shell code:1
Stack trace:
#0 {main}
thrown in php shell code on line 1
php > echo $v->{0};
PHP Notice: Undefined property: stdClass::$0 in php shell code on line 1
Notice: Undefined property: stdClass::$0 in php shell code on line 1
php > echo current($v);
hello
Only current
is working with object.
Solution 8 - Php
the following can be done
$rows=null;
foreach ($result as $rows) break;