当前位置:首页 > PHP教程 > php应用 > 列表

php获取json数据所有的节点路径

发布:smiling 来源: PHP粉丝网  添加日期:2021-05-27 10:02:24 浏览: 评论:0 

这篇文章主要介绍了php获取json数据所有的节点路径的方法和实例,有需要的小伙伴可以参考下。

之前我们讲解过使用javascript获取json数据节点路径的问题,今天我们更进一步,讲解下php获取json数据所有的节点路径。

  1. <?php 
  2.  
  3. function iterTree($data) { 
  4.  $retData = array(); 
  5.  $data = json_decode($data, true); 
  6.  if (!is_array($data) && emptyempty($data)) { 
  7.  echo 'error !' ."n";  
  8.  } else { 
  9.  $queue = array(); 
  10.  foreach ($data as $field => $value) { 
  11.  $queue[] = $field;  
  12.  $head = 0; 
  13.  $tail = count($queue); 
  14.  while ($head < $tail) { 
  15.  $field = $queue[$head++]; 
  16.  $path = explode("/"$field); 
  17.  $tmpData = &$data;  
  18.  foreach ($path as $key => $ph) { 
  19.  $tmpData = &$tmpData[$ph]; 
  20.  if (is_array($tmpData) && !emptyempty($tmpData)) { 
  21.  $newField = $field;  
  22.  foreach ($tmpData as $curField => $curValue) { 
  23.  $newField = $field . '/' . $curField
  24.  $queue[$tail++] = $newField
  25.  } else { 
  26.  $retData[] = $field;  
  27.  return $retData
  28.  
  29. //测试数据 
  30. $data = file_get_contents("http://restapi.ele.me/v1/restaurants?extras%5B%5D=food_activity&extras%5B%5D=restaurant_activity&extras%5B%5D=certification&fields%5B%5D=id&fields%5B%5D=name&fiel 
  31. ds%5B%5D=phone&fields%5B%5D=promotion_info&fields%5B%5D=name_for_url&fields%5B%5D=flavors&fields%5B%5D=is_time_ensure&fields%5B%5D=is_premium&fields%5B%5D=image_path&fields%5B%5D=rating&fie 
  32. lds%5B%5D=is_free_delivery&fields%5B%5D=minimum_order_amount&fields%5B%5D=order_lead_time&fields%5B%5D=is_support_invoice&fields%5B%5D=is_new&fields%5B%5D=is_third_party_delivery&fields%5B% 
  33. 5D=is_in_book_time&fields%5B%5D=rating_count&fields%5B%5D=address&fields%5B%5D=month_sales&fields%5B%5D=delivery_fee&fields%5B%5D=minimum_free_delivery_amount&fields%5B%5D=minimum_order_des 
  34. cription&fields%5B%5D=minimum_invoice_amount&fields%5B%5D=opening_hours&fields%5B%5D=is_online_payment&fields%5B%5D=status&fields%5B%5D=supports&fields%5B%5D=in_delivery_area&geohash=wx4g07 
  35. j0w1v7&is_premium=0&limit=1000&offset=24&type=geohash"); 
  36.  
  37. $ret = iterTree($data); 
  38. print_r($ret);

Tags: php获取json节点

分享到: