2014-01-30 67 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