Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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 引用动态关联数组位置_Php_Arrays_Json - Fatal编程技术网

Php 引用动态关联数组位置

Php 引用动态关联数组位置,php,arrays,json,Php,Arrays,Json,我从在线源请求数据,然后将其解码为json StdClass对象(使用php)。一旦我做到了这一点,我有以下(见下文)。我试图通过执行echo$response->stuff->WHAT go HERE?->otherstuff来提取“otherstuff”中的元素 但是,我不能硬编码[2010-12],因为这是一个日期,有什么方法可以调用,例如$response->stuff->nextsibling->stuff 我希望这对某些人来说是有意义的:D目前我正在使用$key=>$valuefor

我从在线源请求数据,然后将其解码为json StdClass对象(使用php)。一旦我做到了这一点,我有以下(见下文)。我试图通过执行
echo$response->stuff->WHAT go 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
                        )    
                )

        )

) 

StdClass实例可以与其中一些实例一起使用

所以你可以做()


另一方面,对象属性不应以数字开头,并且它们可能不包含破折号,因此与其使用StdClass对象,不如将
TRUE
作为第二个参数传递给
json\u decode
。然后,返回的对象将转换为关联数组

StdClass实例可以与其中一些实例一起使用

所以你可以做()


另一方面,对象属性不应以数字开头,并且它们可能不包含破折号,因此与其使用StdClass对象,不如将
TRUE
作为第二个参数传递给
json\u decode
。然后,返回的对象将转换为关联数组

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


使用字符串检索它。

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


使用字符串检索它。

再次编辑:还添加了目标代码

json将其解码为关联数组,并使用通过
array\u keys
获取的密钥。请在此处查看它的工作情况:


再次编辑:也添加了目标代码

json将其解码为关联数组,并使用通过
array\u keys
获取的密钥。请在此处查看它的工作情况:


您可能想重读这个问题。当您尝试访问未使用数组表示法实现ArrayAccess的对象时会发生什么情况?“致命错误:无法将stdClass类型的对象用作数组”。2010-12部分是动态的,因此我无法使用此方法。您可能希望重新阅读此问题。当您尝试访问未使用数组表示法实现ArrayAccess的对象时会发生什么情况?“致命错误:无法将stdClass类型的对象用作数组”。2010-12部分是动态的,因此我无法使用此方法未定义的偏移量:0->不幸的是,此方法不起作用。它似乎:(@garbit,不客气,我添加了代码将其解码为对象。使用
array\u键
是多余的。访问对象的代码也适用于数组(除非您无法链接它),因为
current
首先是一个数组函数。未定义的偏移量:0->不幸的是,这似乎不起作用:(@garbit,不客气,我添加了代码将其解码为对象。使用
array\u键
是多余的。访问对象的代码适用于数组(除非您无法链接它)另外,因为
current
首先是一个数组函数。我不太确定如何实现你的方法。但是,我已经成功地用这个函数得到了我所需要的;$foo=current($response->stuff),这就给了我一个包含“otherstuff”的对象。它似乎不应该工作,但它确实:D@Garbit这是正确的用法。
current($response->stuff)
将为您提供存储在date属性中的对象。而
key($response->stuff)
将为您提供日期属性的名称。没有理由像其他地方所示使用
array\u key
Current
key
将与数组或StdClass对象一起使用。我不太确定如何实现您的方法。但是,我已经成功地使用它获得了我所需要的;$foo=Current($response->stuff),这就给了我一个包含“otherstuff”的对象。它似乎不应该工作,但它确实:D@Garbit这是正确的用法。
current($response->stuff)
将为您提供存储在date属性中的对象。而
key($response->stuff)
将为您提供日期属性的名称。没有理由如其他地方所示使用
array\u key
Current
key
将与数组或StdClass对象一起使用。
$obj = new StdClass;
$obj->{"2012-10"} = 'foo';
echo current($obj); // foo
echo key($obj); // 2012-10
echo $response->stuff['2010-12']->otherstuff
    <?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);
?>