web-dev-qa-db-fra.com

Obtenir le premier élément dans PHP stdObject

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!

62
Drew Baker

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']
64
Clain Dsilva

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

70
MrTrick

Correct:

$videos= (Array)$videos;
$video = $videos[0];
15
froilanq

beaucoup plus facile:

$firstProp = current( (Array)$object );
13
Patrick

$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.

7
Biraj Bora

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
} 
5
Rolf

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.

2
Thomas Decaux