Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/248.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 按值获取stdClass对象_Php_Key_Stdclass - Fatal编程技术网

Php 按值获取stdClass对象

Php 按值获取stdClass对象,php,key,stdclass,Php,Key,Stdclass,鉴于这个stdClass结构 [RecentAchievements] => stdClass Object ( [1446] => stdClass Object ( [3319] => stdClass Object ( [ID] => 3319 [GameID]

鉴于这个stdClass结构

[RecentAchievements] => stdClass Object
    (
        [1446] => stdClass Object
           (
               [3319] => stdClass Object
                   (
                       [ID] => 3319
                       [GameID] => 1446
                       [Title] => Hello World!
                       [Description] => Complete World 1-1
                       [Points] => 15
                       [BadgeName] => 03909
                       [IsAwarded] => 1
                       [DateAwarded] => 2013-10-20 19:35:46
                   )
我需要检查3319中的对象,比如“Title”,所以它会像:

$data->RecentAchievements->$gameid->ACHVIDHERE->Title;
要获取$gameid,它来自其他对象(最近播放),方法如下:

[RecentlyPlayed] => Array
    (
        [0] => stdClass Object
            (
                [GameID] => 1446
                [ConsoleID] => 7
                [ConsoleName] => NES
                [Title] => Super Mario Bros
                [LastPlayed] => 2013-10-20 21:38:22
                [ImageIcon] => /Images/000385.png
                [ImageTitle] => /Images/000272.png
                [ImageIngame] => /Images/000387.png
                [ImageBoxArt] => /Images/000275.png
            )

    )

$gameid = $data3->RecentlyPlayed['0']->GameID;

API不允许我使用最近播放的相同内容来获取成就ID,我必须从最近的成就中提取它。有可能吗?

您可以使用复杂的卷曲符号来引用对象的动态属性

$data->RecentAchievements->{$gameid}->{$someotherid}->Title;

这应该给你
你好世界
,给定
$gameid
=
1446
$someotherid
=
3319

,如果您刚刚获得该特定游戏的第一项成就,您可以使用以下技巧:

$firstAchievement = reset($data->RecentAchievements->$gameid);
$title = $firstAchievement->Title;

API可能会给你一个JSON响应,所以你可能也想考虑一下:

$data = json_decode($response, true);
                               ^^^^
第二个参数
true
将JavaScript对象转换为PHP数组,这在大多数情况下使处理它们更容易,例如

$firstAchievement = reset($data['RecentAchievements'][$gameid]);
$title = $firstAchievement['Title'];

在我看来,当您需要它来访问该元素时,您不太可能获得该ID。您无法通过现有调用获取更多信息以获取
$gameid
?e、 要求它返回一个包含这两个值的数组?你的意思是将对象转换为数组并提取ID?也许是的,但我在寻找更干净的东西(如果可能的话)。如果我误解了你,很抱歉,但是如何给$someotherid ID值(在这个特定的模型中,3319)?我想ACHVIDHERE是我应该放置成就ID的地方。因此,它将是:
data->recentacheements->{$gameid}->{$someotherid}->Title
@DanielLemes如果
ACHVIDHERE
的值为
3319
$gameid
=
1446
,那么您可以使用
$data->RecentAchEditions->{$gameid}->{ACHVIDHER}E->标题。注意变量和常量周围的
{}
。是的,但这就是重点:访问[3319]=>stdClass对象,获取值(在这个特殊的对象中,3319)并将其交给变量以创建调用标题的第二部分。ACHVIDHERE只是一个占位符,我不知道如何给它赋值。如果不知道该值,可以使用
foreach($key=>object$value)
对其进行迭代。