次のようなオブジェクト($ 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に到達するにはどうすればよいですか?出来ますか?
ありがとう!
2019更新
OOPSのベストプラクティスに進むと、@ MrTrickの答えは正しいものとしてマークする必要がありますが、私の答えはハッキングされたソリューションであり、最善の方法ではありません。
{}を使用して繰り返します
例:
$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];
はるかに簡単:
$firstProp = current( (Array)$object );
$videos->{0}->id
は私のために働いた。
$ videosと{0}は両方ともオブジェクトなので、$videos->{0}->id
でidにアクセスする必要があります。中かっこを省略すると構文エラーが発生するため、中かっこが必要です。予期しない「0」、識別子または変数、または「{」または「$」が必要です。
PHP 5.4.を使用しています。
私の場合、$videos{0}->id
と$videos{0}['id']
のどちらも機能せず、エラーが表示されます。
タイプstdClassのオブジェクトを配列として使用できません。
オブジェクトをループして、最初のループで中断することができます...
foreach($obj as $prop) {
$first_prop = $prop;
break; // exits the foreach loop
}
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
のみがオブジェクトを操作しています。