获取PHP stdObject中的第一个元素

Dre*_*ker 63 php object multidimensional-array

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

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

  etc...
Run Code Online (Sandbox Code Playgroud)

我想得到第一个元素的ID,而不必循环它.

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

$videos[0]['id']
Run Code Online (Sandbox Code Playgroud)

它曾经像这样工作:

$videos[0]->id
Run Code Online (Sandbox Code Playgroud)

但现在我在上面显示的行上得到一个错误"不能使用stdClass类型的对象作为数组...".可能是由于PHP升级.

那么如何在没有循环的情况下获得第一个ID呢?可能吗?

谢谢!

MrT*_*ick 70

可以使用 函数访问array()和stdClass对象 .current() key() next() prev() reset() end()

所以,如果您的对象看起来像

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

那你就可以做;

$id = reset($obj)->id; //Gets the 'id' attr of the first entry in the object
Run Code Online (Sandbox Code Playgroud)

如果你出于某种原因需要密钥,你可以这样做;

reset($obj); //Ensure that we're at the first element
$key = key($obj);
Run Code Online (Sandbox Code Playgroud)

希望对你有用.:-)在PHP 5.4上没有错误,即使在超严格模式下也是如此

  • 这个答案被标记为正确! (2认同)

Cla*_*lva 66

更新2019年

继续使用OOPS的最佳实践,@ MrTrick的答案必须标记为正确,尽管我的答案提供了一个黑客解决方案,但这不是最好的方法.

简单地使用{}迭代它

例:

$videos{0}->id
Run Code Online (Sandbox Code Playgroud)

这样,您的对象不会被破坏,您可以轻松地遍历对象.

对于PHP 5.6及更高版本,请使用此方法

$videos{0}['id']
Run Code Online (Sandbox Code Playgroud)

  • 不确定此{}运算符是否明确存在文档.但凭借经验,我知道这是可能的.您会更有兴趣知道{}运算符也可用于迭代字符串,例如:$ str ="cool"; 如果你回显$ str {0}它会输出第一个字母"C"而echo $ str {1}会输出"o"等等.试一试.. (4认同)
  • 使用PHP 5.6,这是不可能的.您收到以下消息:无法使用stdClass类型的对象作为数组 (4认同)
  • @Clain Dsilva:处理字符串“Grzegrzółka” (2认同)

小智 15

正确:

$videos= (Array)$videos;
$video = $videos[0];
Run Code Online (Sandbox Code Playgroud)

  • 很好的答案,但它并没有真正帮助我浏览一个对象,它只是将它转换为一个数组,然后将其导航为一个数组. (5认同)

小智 13

更容易:

$firstProp = current( (Array)$object );
Run Code Online (Sandbox Code Playgroud)

  • 如果您不知道节点名称,这很好. (5认同)

Bir*_*ora 7

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

由于$ videos和{0}都是对象,因此我们必须使用 $videos->{0}->id.大括号大约需要0,因为省略大括号会产生语法错误:意外的'0',期望标识符或变量或'{'或'$'.

我正在使用PHP 5.4.3.

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

不能使用stdClass类型的对象作为数组.


Rol*_*olf 5

你可以在对象上循环然后在第一个循环中中断...就像这样

foreach($obj as $prop) {
   $first_prop = $prop;
   break; // exits the foreach loop
} 
Run Code Online (Sandbox Code Playgroud)