web-dev-qa-db-ja.com

PHP stdObjectの最初の要素を取得

次のようなオブジェクト($ videosとして保存)があります

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

  etc...

ループすることなく、最初の要素だけのIDを取得したいです。

配列の場合、これを実行します。

$videos[0]['id']

以前は次のように機能していました。

$videos[0]->id

しかし、上記の行に「stdClass型のオブジェクトを配列として使用できません...」というエラーが表示されます。おそらくPHPアップグレード。

では、ループせずにその最初のIDに到達するにはどうすればよいですか?出来ますか?

ありがとう!

62
Drew Baker

2019更新

OOPSのベストプラクティスに進むと、@ MrTrickの答えは正しいものとしてマークする必要がありますが、私の答えはハッキングされたソリューションであり、最善の方法ではありません。

{}を使用して繰り返します

例:

$videos{0}->id

これにより、オブジェクトは破棄されず、オブジェクトを簡単に反復処理できます。

PHP 5.6以下ではこれを使用

$videos{0}['id']
64
Clain Dsilva

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の超厳格モードでもエラーなし

70
MrTrick

正しい:

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

はるかに簡単:

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

$videos->{0}->idは私のために働いた。

$ videosと{0}は両方ともオブジェクトなので、$videos->{0}->idでidにアクセスする必要があります。中かっこを省略すると構文エラーが発生するため、中かっこが必要です。予期しない「0」、識別子または変数、または「{」または「$」が必要です。

PHP 5.4.を使用しています。

私の場合、$videos{0}->id$videos{0}['id']のどちらも機能せず、エラーが表示されます。

タイプstdClassのオブジェクトを配列として使用できません。

7
Biraj Bora

オブジェクトをループして、最初のループで中断することができます...

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

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のみがオブジェクトを操作しています。

2
Thomas Decaux