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

У меня есть объект (сохраненный как $videos), который похож на это

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

  etc...

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

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

$videos[0]['id']

Это раньше работало этим:

$videos[0]->id

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

Таким образом, как я добираюсь до того первого идентификатора без цикличного выполнения? Действительно ли это возможно?

Спасибо!

62
задан 28 February 2012 в 04:10

7 ответов

Обновление 2019

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

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

Пример:

$videos{0}->id

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

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

$videos{0}['id']
65
ответ дан 31 October 2019 в 13:20

К обоим массивам () и объекты 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);

Hope, которая работает на Вас.:-) Никакие ошибки, даже в суперстрогом режиме, на PHP 5.4

70
ответ дан 31 October 2019 в 13:20

Корректный:

$videos= (Array)$videos;
$video = $videos[0];
15
ответ дан 31 October 2019 в 13:20

намного легче:

$firstProp = current( (Array)$object );
13
ответ дан 31 October 2019 в 13:20

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

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

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

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

не Может использовать объект типа stdClass как массив.

7
ответ дан 31 October 2019 в 13:20

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

foreach($obj as $prop) {
   $first_prop = $prop;
   break; // exits the foreach loop
} 
5
ответ дан 31 October 2019 в 13:20

Играя с 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::[110] in php shell code on line 1

Notice: Undefined property: stdClass::[110] in php shell code on line 1
php > echo current($v);
hello

Только current работают с объектом.

2
ответ дан 31 October 2019 в 13:20

Другие вопросы по тегам:

Похожие вопросы: