【问题标题】:How to access stdclass object after a specific key value pair?如何在特定键值对之后访问 stdclass 对象?
【发布时间】: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']

标签: php arrays json curl stdclass


【解决方案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'];
    

    【讨论】:

    【解决方案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 语句找到父级,我看不出有任何理由不能这样做。
        • 对不起,如果帮不上忙,但我想试试。如果您可以在定位父级时找到并打印它,那么剩下的就是您的语法。但如果不是你在检查条件上做了标记,我的假设是错误的;)
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-17
        • 2020-06-04
        • 2020-06-28
        • 2013-01-13
        • 2015-10-07
        相关资源
        最近更新 更多