如何在特定键值对之后访问 stdclass 对象?
Posted
技术标签:
【中文标题】如何在特定键值对之后访问 stdclass 对象?【英文标题】:How to access stdclass object after a specific key value pair? 【发布时间】:2011-08-18 01:28:31 【问题描述】:我有一个 stdclass 对象,如下所示:
stdClass Object
(
[text] => Parent
[values] => Array
(
[0] => stdClass Object
(
[id] => /m/0c02911
[text] => Laurence W. Lane Jr.
[url] => http://www.freebase.com/view/m/0c02911
)
)
)
我迭代了多个这样的对象,其中一些具有
stdClass Object
(
[text] => Named after
[values] => Array
(
[0] => stdClass Object
(
[id] => /m/0c02911
[text] => Stanford
[url] => SomeURL
)
)
)
我想知道如果“值”对象出现在以“父”为值的“文本”之后,我将如何访问它?
【问题讨论】:
你有没有尝试过类似 Object['text']['values'][0]['id'] 的东西,这是相当深的数组;) 问题是它会返回文本值为“Named after”的对象,而我只想要文本值为“Parent”的对象。谢谢! 在你的循环中做一个检查 if(Object['text'] === 'Parent') echo 'Found parent' 我不确定您使用什么语言进行迭代,但在 php 中,它是$object->values[0]->id
。 编辑:哦,“值”不是一个对象,而是一个对象属性。
还有@robx 我如何访问下一个值?因为对象不是Object['text']['values'],而是Object['values']
【参考方案1】:
这可以帮助您使用 codeigniter 框架访问 php 中的子数组
foreach ($cassule['tarefa'][0] as $tarefa => $novo_puto_ultimos_30_dias)
echo $novo_puto_ultimos_30_dias;
【讨论】:
请在您的回答中提供更多详细信息。正如目前所写的那样,很难理解您的解决方案。【参考方案2】:我遇到了同样的问题,仍然不太清楚为什么,但我能够使用此解决方法使其正常工作:
$k2 ="1";
$elements = json_decode('"id":"1","name":"User1"');
//$elements['id'] == $k2; //****Not Working
$tmp = (object)$elements;
$tmp = $tmp ->id; //****Working
//$tmp =$elements['id'] ; //****Not Working
return $tmp == $k2;
我不得不说,有时将元素作为数组访问有效,有时则无效,(在 PHP7 上它对我有用,但在 PHP5.6 上却没有)。
$elements
可以是Array,但我选择用json字符串来演示。
我希望这会有所帮助!!!
【讨论】:
【参考方案3】:有几种方法可以将其转换为数组:
第一个解决方案:
$value = get_object_vars($object);
第二种解决方案:
$value = (array) $object;
第三种解决方案
$value = json_decode(json_encode($object), true);
获取转换后数组的值
echo $value['values']['0']['id'];
在不转换对象的情况下访问对象 var 的替代方法,试试
$object->values->'0'->id
【讨论】:
对于最后一个选项,那就是 $object->attributes->'0'->idError: Cannot use object of type stdClass as array
【参考方案4】:
根据 Somwang Souksavatd 的回答扩展(或更确切地说是最小化),我喜欢像这样访问 Object 值:
echo get_object_vars($object)['values']['0']['id'];
【讨论】:
需要注意的一点:您的“最小化”版本仅适用于 php 5.4 或更高版本。 That was the version that added function array dereferencing.如果您的php版本较低,则需要Somwang的两步过程。【参考方案5】:我在做同样的事情,我所做的就是这个;
<?php
$stdObject = json_decode($stdClassObject);
print $stdObject->values[0]->id;
【讨论】:
【参考方案6】:
$Obj=stdClass Object
(
[text] => Named after
[values] => Array
(
[0] => stdClass Object
(
[id] => /m/0c02911
[text] => Stanford
[url] => SomeURL
)
)
)
$Values= $result->values;
$Item = $Values[0];
$id=$Item->id;
$text = $Item->text;
$url=$Item->url;
【讨论】:
【参考方案7】:您正在寻找的是 Object['values'][0]:'values' 是键映射,就像 'text' 一样,[0] 是您希望访问的数组内的索引。因此,如果您想在巢穴深处获取 id,则必须执行类似
的操作Object['values'][0]['id']
或
Object['values'][0]->id
这应该给你/m/0c02911。但是我不知道你是如何做你的循环的,所以你必须根据你的需要调整它,并将适当的变量放置在你循环的代码中它们需要进入的地方。不确定您使用的是哪种语言。
【讨论】:
这里的问题是我会得到在 Object['text'] = Named 之后的 Object['values'],这不是我想要的 ;) 如果您使用了我之前提到的检查条件和这段代码,您将能够找到与“Parent”配对的数组。如果您能够使用 echo 语句找到父级,我看不出有任何理由不能这样做。 对不起,如果帮不上忙,但我想试试。如果您可以在定位父级时找到并打印它,那么剩下的就是您的语法。但如果不是你在检查条件上做了标记,我的假设是错误的;)以上是关于如何在特定键值对之后访问 stdclass 对象?的主要内容,如果未能解决你的问题,请参考以下文章