获取PHP stdObject中的第一个元素

我有一个对象(存储为$video),看起来像这样

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

我想获得第一个元素的ID,而不必循环。

如果它是一个数组,我会这样做:

 $videos[0]['id'] 

它曾经是这样工作的:

 $videos[0]->id 

但是现在我在上面显示的行中出现一个错误“不能使用types为stdClass的对象作为数组…”。 可能是由于PHP升级。

那么我怎样才能得到第一个ID没有循环? 可能吗?

谢谢!

只需使用{}

例:

 $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]; 

你可以循环的对象,也许在第一个循环中断…类似的东西

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

更容易:

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

$videos->{0}->id为我工作。

由于$video和{0}都是对象,因此我们必须使用$videos->{0}->id 。 大括号需要在0左右,因为省略大括号会产生一个语法错误:意外的'0',期待标识符或variables或'{'或'$'。

我正在使用PHP 5.4.3

在我的情况下, $videos{0}->id$videos{0}['id']工作,并显示错误:

不能使用stdClasstypes的对象作为数组。

玩Php交互式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::$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正在与对象。