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


Posted in PHP onMay 17, 2015

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

<?php

function iterTree($data) {
 $retData = array();
 $data = json_decode($data, true);
 if (!is_array($data) && empty($data)) {
 echo 'error !' ."n"; 
 } else {
 $queue = array();
 foreach ($data as $field => $value) {
 $queue[] = $field; 
}
 $head = 0;
 $tail = count($queue);
 while ($head < $tail) {
 $field = $queue[$head++];
 $path = explode("/", $field);
 $tmpData = &$data; 
 foreach ($path as $key => $ph) {
 $tmpData = &$tmpData[$ph];
}
 if (is_array($tmpData) && !empty($tmpData)) {
 $newField = $field; 
 foreach ($tmpData as $curField => $curValue) {
 $newField = $field . '/' . $curField;
 $queue[$tail++] = $newField;
}
 } else {
 $retData[] = $field; 
}
}
}
 return $retData;
}

//测试数据
$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
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
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%
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
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
j0w1v7&is_premium=0&limit=1000&offset=24&type=geohash");

$ret = iterTree($data);
print_r($ret);

以上所述就是本文的全部内容了,希望大家能够喜欢。

PHP 相关文章推荐
php 禁止页面缓存输出
Jan 07 PHP
关于php操作mysql执行数据库查询的一些常用操作汇总
Jun 24 PHP
分享php代码将360浏览器导出的favdb的sqlite数据库文件转换为html
Dec 09 PHP
PHP按指定键值对二维数组进行排序的方法
Dec 22 PHP
Zend Framework教程之Zend_Db_Table_Row用法实例分析
Mar 21 PHP
PHP微信开发之文本自动回复
Jun 23 PHP
laravel5.2实现区分前后台用户登录的方法
Jan 11 PHP
深入浅析PHP的session反序列化漏洞问题
Jun 15 PHP
php实现的中秋博饼游戏之掷骰子并输出结果功能详解
Nov 06 PHP
深入理解 PHP7 中全新的 zval 容器和引用计数机制
Oct 15 PHP
PHP下载大文件失败并限制下载速度的实例代码
May 10 PHP
解决laravel 出现ajax请求419(unknown status)的问题
Sep 03 PHP
php中memcache 基本操作实例
May 17 #PHP
PHP实现过滤各种HTML标签
May 17 #PHP
支持中文的PHP按字符串长度分割成数组代码
May 17 #PHP
php 批量查询搜狗sogou代码分享
May 17 #PHP
PHP解密Unicode及Escape加密字符串
May 17 #PHP
PHP实现远程下载文件到本地
May 17 #PHP
PHP生成json和xml类型接口数据格式
May 17 #PHP
You might like
php 伪造本地文件包含漏洞的代码
2011/11/03 PHP
php模仿asp Application对象在线人数统计实现方法
2015/01/04 PHP
php实现简易计算器
2020/08/28 PHP
javascript实现原生ajax的几种方法介绍
2013/09/21 Javascript
jquery获取颜色在ie和ff下的区别示例介绍
2014/03/28 Javascript
AngularJS控制器继承自另一控制器
2016/05/09 Javascript
3kb jQuery代码搞定各种树形选择的实现方法
2016/06/10 Javascript
AngularJs  E2E Testing 详解
2016/09/02 Javascript
JS自定义函数对web前端上传的文件进行类型大小判断
2016/10/19 Javascript
微信小程序  checkbox组件详解及简单实例
2017/01/10 Javascript
微信小程序后台解密用户数据实例详解
2017/06/28 Javascript
jquery拖拽自动排序插件使用方法详解
2020/07/20 jQuery
微信小程序select下拉框实现效果
2019/05/15 Javascript
新手入门带你学习JavaScript引擎运行原理
2019/06/24 Javascript
layui的表单验证支持ajax判断用户名是否重复的实例
2019/09/06 Javascript
JavaScript 实现轮播图特效的示例
2020/11/05 Javascript
设计模式中的原型模式在Python程序中的应用示例
2016/03/02 Python
Python 逐行分割大txt文件的方法
2017/10/10 Python
win10 64bit下python NLTK安装教程
2018/09/19 Python
matplotlib绘制多个子图(subplot)的方法
2019/12/03 Python
python GUI库图形界面开发之PyQt5打开保存对话框QFileDialog详细使用方法与实例
2020/02/27 Python
Python实现区域填充的示例代码
2021/02/03 Python
在css3中background-clip属性与background-origin属性的用法介绍
2012/11/13 HTML / CSS
详解html5页面 rem 布局适配方法
2018/01/12 HTML / CSS
Mamas & Papas沙特阿拉伯:英国最受欢迎的婴儿品牌
2017/11/20 全球购物
TripAdvisor斯洛伐克:阅读评论、比较价格和酒店预订
2018/04/25 全球购物
护理实习自我鉴定
2013/12/14 职场文书
工作过失检讨书
2014/02/23 职场文书
大学生活动总结怎么写
2014/04/29 职场文书
毕业评语大全
2014/05/04 职场文书
医院2014国庆节活动策划方案
2014/09/21 职场文书
五好家庭申报材料
2014/12/20 职场文书
毕业论文致谢信
2015/05/14 职场文书
小学语文教师研修感悟
2015/11/18 职场文书
windows server2008 开启端口的实现方法
2022/06/25 Servers
java.util.NoSuchElementException原因及两种解决方法
2022/06/28 Java/Android