2014-01-30 70 views
0

我從cURL API獲取JSON對象,我需要遞歸瀏覽JSON並打印數組的樹視圖。PHP從JSON遞歸檢索值

這裏看看JSON對象:

{"message":"OK", 
"records":{"Company INC": 
    [{"positionName":"CEO", 
     "seniorName":"John Doe", 
     "seniorId":"1035", 
     "seniorSex":"male", 
     "child":[{"positionName":"Assistant to CEO", 
       "seniorName":"Jane Doe", 
       "seniorId":"427", 
       "seniorSex":"female", 
       "child":[{"positionName":"Assitant to assistant", 
          "seniorName":"James Doe", 
          "seniorId":"1370", 
          "seniorSex":"male"}, 
         {"positionName":"2nd Assistant", 
          "seniorName":"Jana D. OE", 
          "seniorId":"1049", 
          "seniorSex":"female","child": ... 

等,你可以在記錄部分中看到,有些人有孩子,我需要打印他們。 這是我使用json_decode(true)JSON對象後使用的函數。

function recurseTree($var){ 
    $out = '<li>'; 
    foreach($var as $v){ 
     if(is_array($v)){ 
      $out .= '<ul>'.recurseTree($v).'</ul>'; 
     }else{ 
      $out .= $v." "; 
     } 
    } 
    return $out.'</li>'; 
} 

這個偉大的工程,除了它打印所有的從JSON的信息,我想打印在一行只有seniorName和positionName。

我該如何做到這一點?

+1

使用['json_decode'(http://nl1.php.net/json_decode)啊,看來你(可能)已經這樣做了,你使用'is_array'在那種情況下,你的情況與使用數組檢索屬性並跳過其他某些代碼的其他代碼有什麼不同? – AmazingDreams

+0

爲什麼你不使用json_decode?你必須先解碼你的JSON到一個對象或數組 –

+0

你想輸出像

  • 「John Doe,CEO」
  • ...
  • 「James Doe,助理助理」
  • ,我是對的嗎? –

    回答

    0

    使用PHP函數in_array()跳過一組特性。或者用它來定義鍵,你不想跳過:

    $keys_to_skip = array('some', 'keys', 'to', 'skip'); 
    
    function recurseTree($var, $keys_to_skip){ 
        $out = '<li>'; 
        foreach($var as $k => $v){ // Note I take the key here 
         if(in_array($k, $keys_to_skip)) { continue; } 
    
         if(is_array($v)){ 
          $out .= '<ul>'.recurseTree($v, $keys_to_skip).'</ul>'; 
         } else { 
          $out .= $v." "; 
         } 
        } 
    
        return $out.'</li>'; 
    } 
    
    +1

    根據您是否有大量數組鍵,您可能想要將「$ keys_to_skip」反轉爲「$ keys_to_use」並使用if(!in_array($ k ,$ keys_to_use)){continue; },無論你需要維護一個更小的數組列表!你也可能不想把它全部串接成一個字符串,而是連接到一個數組中,這樣你就可以使用自定義排序來確保seniorName超出positionName。 – niaccurshi

    +0

    謝謝你的回答。然而,你的代碼沒有返回任何東西,即使我只在skip數組中定義了seniorID和seniorSex,它也會以某種方式跳過所有內容。 – Vojtech

    +0

    您是否嘗試瞭解'$ k'和'$ v'的值是什麼? – AmazingDreams