如何在特定键值对之后访问 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'->id Error: 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 对象?的主要内容,如果未能解决你的问题,请参考以下文章

如何在php中将对象数组转换为键值对

如何访问数组的对象(stdClass Object)成员/元素的属性? [复制]

如何从键值对数组创建对象?

如何使用从 stdClass 对象数组中内爆一列?

如何在 GraphQL 中用键值对表示地图或对象?

将键值对添加到 Javascript 对象中