Получить первый элемент в 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.



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



спасибо!

906   7  

7 ответов:

просто повторите его с помощью {}

пример:

$videos{0}->id

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

для PHP 5.6 и выше используйте это

$videos{0}['id']

оба объекта 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

правильно:

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

гораздо проще:

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

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

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

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

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

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

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

foreach($obj as $prop) {
   $first_prop = $prop;
   break; // or exit or whatever exits a foreach loop...
} 

игра с 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:: in php shell code on line 1

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

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

Comments

    Ничего не найдено.