引用动态关联数组位置

时间:2011-03-01 09:37:34

标签: php arrays json

我正在从在线源请求数据,然后我将其解码为json StdClass对象(使用php)。一旦我完成了这个,我有以下内容(见下文)。我试图通过echo $response->stuff->WHAT GOES HERE?->otherstuff

提取'otherstuff'中的元素

但是我不能对[2010-12]进行硬编码,因为它是一个约会对象,我有什么方法可以打电话,例如$response->stuff->nextsibling->stuff

我希望这对某些人有意义:D目前,我正在通过$key => $value for循环对其进行混蛋,并提取键值并在$response->stuff->$key->stuff调用中使用它。

stdClass Object
(
    [commentary] => 
    [stuff] => stdClass Object
        (
            **[2010-12]** => stdClass Object
                (
                    [otherstuff] => stdClass Object
                        (
                            [otherstuffrate] => 1
                            [otherstufflevel] => 1
                            [otherstufftotal] => 1
                        )    
                )

        )

) 

3 个答案:

答案 0 :(得分:3)

StdClass实例可以与一些Array Functions一起使用,其中包括

所以你可以做(​​codepad

$obj = new StdClass;
$obj->{"2012-10"} = 'foo';
echo current($obj); // foo
echo key($obj); // 2012-10

在旁注中,对象属性不应该以数字开头,并且它们可能不包含破折号,因此不是使用StdClass对象,而是将TRUE作为第二个参数传递给json_decode。然后,返回的对象将转换为关联数组。

答案 1 :(得分:0)

日期键必须是字符串,否则PHP会中断;)。

echo $response->stuff['2010-12']->otherstuff

使用字符串检索它。

答案 2 :(得分:0)

再次编辑:添加了对象代码

json将其解码为关联数组,并使用通过array_keys获取的密钥。看到它在这里工作:http://codepad.org/X8HCubIO

    <?php

$str = '{
       "commentary" : null,
        "stuff" : {
            "ANYDATE" : {
                "otherstuff": {
                    "otherstuffrate" : 1,
                    "otherstufflevel" : 1,
                    "otherstufftotal" : 1
                }
            }
        }
      }';

$obj = json_decode($str,true);
$reqKey = array_keys($obj["stuff"]);
$req = $obj["stuff"][$reqKey[0]]["otherstuff"];
print_r($req);
print "====================as object ============\n";
$obj = json_decode($str);
$req = current($obj->stuff)->otherstuff; 
print_r($req);
?>