Php 引用动态关联数组位置
我从在线源请求数据,然后将其解码为json StdClass对象(使用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
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);
?>