У меня есть объект (сохраненный как $ 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.
Итак, как мне добраться до этого первого идентификатора без цикла? Является ли это возможным?
Благодаря!
Просто повторите его использование {}
Пример:
$videos{0}->id
Таким образом, ваш объект не уничтожается, и вы можете легко перебирать объект.
Для PHP 5.6 и выше используйте это
$videos{0}['id']
Доступ к объектам как array (), так и stdClass можно получить с помощью функции end()
next()
prev()
reset()
end()
функции current()
.
Итак, если ваш объект выглядит
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];
Возможно, вы могли бы зациклиться на объекте и сломаться в первом цикле … Что-то вроде
foreach($obj as $prop) { $first_prop = $prop; break; // or exit or whatever exits a foreach loop... }
намного легче:
$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 как массив.
Игра с интерактивной оболочкой 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
работает с объектом.