J'ai un objet (stocké sous $ videos) qui ressemble à ceci
object(stdClass)#19 (3) {
[0]=>
object(stdClass)#20 (22) {
["id"]=>
string(1) "123"
etc...
Je veux obtenir l'identifiant de ce premier élément, sans avoir à le lire en boucle.
Si c'était un tableau, je ferais ceci:
$videos[0]['id']
Cela fonctionnait comme ceci:
$videos[0]->id
Mais maintenant je reçois une erreur "Impossible d'utiliser l'objet de type stdClass comme tableau ..." sur la ligne indiquée ci-dessus. Probablement en raison d'une mise à niveau PHP.
Alors, comment puis-je accéder à ce premier ID sans avoir à boucler? C'est possible?
Merci!
Mise à jour 2019
Passons maintenant aux meilleures pratiques de OOPS, la réponse de @ MrTrick doit être marquée comme étant correcte, bien que ma réponse fournisse une solution piratée, ce n’est pas la meilleure méthode.
Il suffit de itérer son utilisation {}
Exemple:
$videos{0}->id
De cette façon, votre objet n'est pas détruit et vous pouvez facilement parcourir l'objet.
Pour PHP 5.6 et inférieur, utilisez cette
$videos{0}['id']
Les objets array () et stdClass sont accessibles à l’aide de current()
key()
next()
prev()
reset()
end()
fonctions.
Donc, si votre objet ressemble à
object(stdClass)#19 (3) {
[0]=>
object(stdClass)#20 (22) {
["id"]=>
string(1) "123"
etc...
Ensuite, vous pouvez simplement faire;
$id = reset($obj)->id; //Gets the 'id' attr of the first entry in the object
Si vous avez besoin de la clé pour une raison quelconque, vous pouvez le faire.
reset($obj); //Ensure that we're at the first element
$key = key($obj);
J'espère que cela fonctionne pour vous. :-) Aucune erreur, même en mode super strict, sur PHP 5.4
Correct:
$videos= (Array)$videos;
$video = $videos[0];
beaucoup plus facile:
$firstProp = current( (Array)$object );
$videos->{0}->id
a travaillé pour moi.
Puisque $ videos et {0} sont tous deux des objets, nous devons donc accéder à id avec $videos->{0}->id
. Les accolades sont requises autour de 0, car leur omission produira une erreur de syntaxe: un "0" inattendu, un identificateur ou une variable en attente, ou un "{" ou un "$".
J'utilise PHP 5.4..
Dans mon cas, ni $videos{0}->id
et $videos{0}['id']
a travaillé et affiche une erreur:
Impossible d'utiliser l'objet de type stdClass comme tableau.
Vous pourriez peut-être boucler sur l'objet et casser la première boucle ... Quelque chose comme
foreach($obj as $prop) {
$first_prop = $prop;
break; // exits the foreach loop
}
Jouer avec 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
Seul current
travaille avec un objet.