Подтвердить что ты не робот

Получить первый элемент в PHP stdObject

У меня есть объект (сохраненный как $videos), который выглядит как

object(stdClass)#19 (3) {
  [0]=>
  object(stdClass)#20 (22) {
    ["id"]=>
    string(1) "123"

  etc...

Я хочу получить идентификатор только этого первого элемента, не зацикливая его.

Если бы это был массив, я бы сделал следующее:

$videos[0]['id']

Он работал так:

$videos[0]->id

Но теперь я получаю сообщение об ошибке "Невозможно использовать объект типа stdClass as array..." в строке, показанной выше. Возможно, из-за обновления PHP.

Итак, как мне добраться до этого первого идентификатора без цикла? Возможно ли это?

Спасибо!

4b9b3361

Ответ 1

Обновление 2019

Переходя к лучшим практикам OOPS, ответ @MrTrick должен быть помечен как правильный, хотя мой ответ предоставляет взломанное решение, это не лучший метод.

Просто выполните итерацию, используя {}

Пример:

$videos{0}->id

Таким образом, ваш объект не уничтожается, и вы можете легко перебирать объект.

Для PHP 5.6 и ниже используйте это

$videos{0}['id']

Ответ 2

Оба объекта array() и stdClass могут быть доступны с помощью current() key() next() prev() reset() end() функции.

Итак, если ваш объект выглядит как

object(stdClass)#19 (3) {
  [0]=>
  object(stdClass)#20 (22) {
    ["id"]=>
    string(1) "123"
  etc...

Тогда вы можете просто сделать:

$id = reset($obj)->id; //Gets the 'id' attr of the first entry in the object

Если вам по какой-то причине нужен ключ, вы можете сделать:

reset($obj); //Ensure that we're at the first element
$key = key($obj);

Надеюсь, что это сработает для вас.:-) Нет ошибок, даже в супер-строгом режиме, на PHP 5.4

Ответ 3

Правильно:

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

Ответ 4

намного проще:

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

Ответ 5

$videos->{0}->id работал у меня.

Так как $videos и {0} оба являются объектами, значит, нам нужно получить доступ к id с помощью $videos->{0}->id. В фигурных скобках требуется около 0, так как отсутствие фигурных скобок приведет к синтаксической ошибке: неожиданной "0", ожидающей идентификатора или переменной или "{" или "$".

Я использую PHP 5.4.3.

В моем случае ни $videos{0}->id, и $videos{0}['id'] не работали и не показывали ошибку:

Нельзя использовать объект типа stdClass как массив.

Ответ 6

Вы можете зациклить объект, возможно, и прервать первый цикл... Что-то вроде

foreach($obj as $prop) {
   $first_prop = $prop;
   break; // exits the foreach loop
} 

Ответ 7

Игра с интерактивной оболочкой Php, 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

Работает только с объектом current.