获取 PHP stdObject 中的第一个元素

我有一个像这样的对象(存储为 $video)

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


etc...

我只想得到第一个元素的 ID,而不需要对它进行循环。

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

$videos[0]['id']

以前是这样的:

$videos[0]->id

但是现在我在上面显示的行中得到了一个错误“ Can not use object of type stdClass as array...”。可能是因为 PHP 升级。

那么如何不循环地访问第一个 ID 呢? 有可能吗?

谢谢!

126937 次浏览

正确:

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

你可以在物体上循环,然后在第一个循环中断开。 差不多

foreach($obj as $prop) {
$first_prop = $prop;
break; // exits the foreach loop
}

类访问 array ()和 stdClass 对象 current() > key() next() prev() reset() < a href = “ http://php.net/Manual/en/function. end.php”rel = “ nofollow noReferrer”> 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上,即使在超级严格的模式下,也没有错误


2022年更新:
在 PHP 7.4之后,不推荐对对象使用 current()end()等函数。

在 PHP 的新版本中,使用 数组迭代器类:

$objIterator = new ArrayIterator($obj);


$id = $objIterator->current()->id; // Gets the 'id' attr of the first entry in the object


$key = $objIterator->key(); // and gets the key

更新 PHP 7.4

自 PHP 7.4以来,不推荐使用花括号访问语法

2019年最新情况

继续讨论 OOPS 的最佳实践,“ Trick 先生的回答肯定是 标记为正确,虽然我的答案提供了一个被黑客攻击的解决方案 最好的方法。

只需使用{}迭代它

例如:

$videos{0}->id

这样就不会破坏对象,并且可以轻松地遍历对象。

对于 PHP 5.6及以下版本,请使用

$videos{0}['id']

容易得多:

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

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

因为 $video 和{0}都是对象,所以我们必须使用 $videos->{0}->id访问 id。大括号需要在0左右,因为省略大括号将产生语法错误: 意外的“0”,期望标识符或变量或“{”或“ $”。

我用的是 PHP 5.4.3

在我的例子中,$videos{0}->id$videos{0}['id']都不起作用,并显示出错误:

不能将 stdClass 类型的对象用作数组。

玩 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使用对象。

可以做到以下几点

$rows=null;
foreach ($result as $rows) break;