2012-07-01 81 views
2

我似乎有點失去了什麼如此這般,即時嘗試解析出一些信息,但stdClass會一直在改變,所以我不太確定該怎麼做,可以使用來指導。解析隨機stdClass

//查詢

$query = new EntityFieldQuery; 
$result = $query 
    ->entityCondition('entity_type', 'taxonomy_term') 
    ->propertyCondition('name', 'GOOG') 
    ->propertyCondition('vid', '3') 
    ->execute(); 

//這是輸出

Array 
(
    [taxonomy_term] => Array 
     (
      [1868] => stdClass Object 
       (
        [tid] => 1868 
       ) 

     ) 

) 

現在我可以用

$result['taxonomy_term']['1868']->tid 

獲得的TID,但作爲在stdClass的前面提到的將一直在變化。

+0

所以,你需要能夠獲得比'tid',他們的名字你不事先知道其他屬性? –

+0

即時嘗試獲取tid的屬性,但stdClass總是在變化。所以它很難做到這一點,它不斷變化 – Suzed

回答

2

可以使用recurssive陣列搜索這樣的:

function array_searchRecursive($needle, $haystack, $strict=false, $path=array()) 
{ 
    if(!is_array($haystack)) { 
     return false; 
    } 

    foreach($haystack as $key => $val) { 
     if(is_array($val) && $subPath = array_searchRecursive($needle, $val, $strict, $path)) { 
      $path = array_merge($path, array($key), $subPath); 
      return $path; 
     } elseif((!$strict && $val == $needle) || ($strict && $val === $needle)) { 
      $path[] = $key; 
      return $path; 
     } 
    } 
    return false; 
} 

用法:

$arr = (array) $yourObject; 
$keypath = array_searchRecursive('tid', $arr); 

實施例:

$class = new stdClass; 
$class->foo = 'foo'; 
$class->bar = 'bar'; 
$arr = (array) $class; 
$keypath = array_searchRecursive('foo', $arr); 
print_r($keypath); 

結果:

Array 
(
    [0] => foo 
) 

所以現在獲得實際值:

echo $keypath[0]; // foo 
+0

我是否正確使用它?因爲它不斷返回空白。 http://pastebin.com/p4nK7vWb – Suzed

+0

@Suzed:你的鏈接不對我開放,試試codepad.org – Blaster

+0

對不起。 http://codepad.org/HWi25F0v – Suzed