Получить первый элемент в 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.
Итак, как мне добраться до этого первого идентификатора без цикла? Возможно ли это?
Спасибо!
Ответы
Ответ 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
.