2011-05-03 80 views
11

我有一個stdClass的對象,如下所示:如何在特定鍵值對之後訪問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 
       ) 

     ) 

) 

我想知道我會如何,如果它進入「價值」對象是以「Parent」作爲其值的「文本」之後出現的嗎?

+0

你是否嘗試過沿着Object ['text'] ['values'] [0] ['id']這一行很深的數組; – robx 2011-05-03 21:18:19

+0

問題是它會返回帶有文本值「Named之後「,而我只想要文本值爲」父母「的人。謝謝!你的循環中的 – Rio 2011-05-03 21:19:04

+1

做一個檢查if(Object ['text'] ==='Parent')echo'Found parent' – robx 2011-05-03 21:23:36

回答

-3

你在找什麼是對象['values'] [0]:'values'是keymap就像'text'一樣,[0]是你希望訪問的數組中的索引。所以,如果你想獲得的ID深窩,你必須這樣做

Object['values'][0]['id'] 

Object['values'][0]->id 

這應該給你/ M/0c02911。但我不知道你是如何做你的循環,所以你將不得不根據你的需要進行調整,並將適當的變量放在你的循環中代碼所需的位置。不完全確定你正在使用哪種語言。

+0

這裏的問題是,我將獲得Object ['values']之後的對象['values'文本'] =命名後,這是不是我想要的;) – Rio 2011-05-04 05:10:03

+0

如果你已經使用了檢查條件在那裏,如前面提到的與這段代碼結合在一起,你將能夠找到與「家長」。如果你能夠用echo語句找到Parent,我看不出有什麼理由不能做到這一點。 – robx 2011-05-04 05:31:32

+0

對不起,如果忍不住,但想id嘗試。如果您在查找父級時可以找到並打印它,那麼剩下的就是您的語法。但是,如果那不是你在檢查條件上做了標誌的話,我的錯誤是做出了假設;) – robx 2011-05-04 06:16:05

33

有serveral的方式,把它轉化爲數組:

首個解決方案:

$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 
+1

對於最後一個選項,那將是$ object-> attributes - > {'0'} - > id – 2015-09-11 15:00:15

0
 


     $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; 

 
0

我在做同樣的事情而我所做的只是這個;

<?php 
$stdObject = json_decode($stdClassObject); 
print $stdObject->values[0]->id; 
2

通過Somwang Souksavatd擴展(或者說minimalizing)在回答,我喜歡訪問對象的值是這樣的:

echo get_object_vars($object)['values']['0']['id']; 
+1

有一件事要注意:你的「最小化」版本只適用於php版本5.4或更高版本。 [這是增加了函數數組解引用的版本。](http://www.php.net/manual/en/migration54.new-features.php)如果你的php版本較低,Somwang的兩步過程是必要的。 – 2014-02-15 23:01:30

0

我有同樣的問題,還不是那麼知道爲什麼,但我能搞不定使用此解決方法:

$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可以是數組,但我選擇用json字符串來演示。

我希望這有助於某種方式!