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

之前我们讲解过使用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);

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

(0)

相关推荐

  • PHP 循环删除无限分类子节点的实现代码

    复制代码 代码如下: <?php    private  function _deleteSubNode($ids){ $subNodes = array();        $mod = D('Node');        foreach (explode ( ',', $ids ) as $k){            $res = $this->_getSubNode($k,$subNodes[$k],$mod);  //获取子节点            if(!empty($res[0

  • 利用php递归实现无限分类 格式化数组的详解

    我们要做一个商品的无限分类首先数据库字段为:id ----------商品主键idfid ---------- 商品父idname ---------- 商品名最后输出的数组格式为 复制代码 代码如下: <PRE class=php name="code"><PRE class=php name="code">array( 0=>array(  'id'=>1,  'fid'=>0,  'name'=>'法国货'  '

  • 解析thinkphp的左右值无限分类

    以前一直使用父子无限分类,这种分类结构清晰,使用也简单.但若分类数量很大的话,在查询上性能不佳.比如在做导航菜单中,我要根据某一分类查询出整个分类树的话(祖辈).性能消耗是非常大的,要么做递归,要么做多次查询.故,对于分类的数据量很大的情况,我推荐使用左右值,以减少查询上的麻烦. 复制代码 代码如下: _id    /**         +----------------------------------------------------------         * 构造函数     

  • PHP无限分类(树形类)

    复制代码 代码如下: <?php//模拟PHP无限分类查询结果return array(    array(        'id'=>1,        'pid'=>0,        'name'=>'主页'    ),    array(        'id'=>2,        'pid'=>0,        'name'=>'新闻'    ),    array(        'id'=>3,        'pid'=>0,   

  • PHP带节点操作的无限分类实现方法详解

    本文实例讲述了PHP带节点操作的无限分类实现方法.分享给大家供大家参考,具体如下: 包含(移动多个节点:移动单个节点:删除多个节点:删除单个节点:新增节点),另附数据库表结构 一.db sql语句 //db used for php无限分类 create table tree( id int(10) not null primary key auto_increment, name varchar(255) not null, lft int(10) not null default 0, rg

  • PHP+Mysql树型结构(无限分类)数据库设计的2种方式实例

    我们经常需要在关系型数据库中保存一些树状结构数据,比如分类.菜单.论坛帖子树状回复等.常用的方法有两种: 1. 领接表的方式: 2. 预排序遍历树方式: 假设树状结构如下图: 领接表方式 主要依赖于一个 parent 字段,用于指向上级节点,将相邻的上下级节点连接起来,id 为自动递增自动,parent_id 为上级节点的 id.一目了然,"Java"是"Language"的子节点. 我们要显示树,PHP 代码也可以很直观,代码如下: 复制代码 代码如下: <

  • PHP往XML中添加节点的方法

    本文实例讲述了PHP往XML中添加节点的方法.分享给大家供大家参考.具体方法如下: 1. contacts.xml代码 复制代码 代码如下: <contact id="43956">      <personal>           <name>                <first>J</first>                <middle>J</middle>             

  • PHP无限分类(树形类)的深入分析

    PHP无限分类,Google一下就能找到很多相关资料,思路比较拉风的,也是用得比较多的就是分类表至少有id,pid,name三个字段,id自增表分类,pid为父分类,name为分类名,这样就构成了一棵树,如下,算是我查询分类表得到的结果集. 复制代码 代码如下: <?php//模拟PHP无限分类查询结果return array(    array(        'id'=>1,        'pid'=>0,        'name'=>'主页'    ),    array

  • php+mysql实现无限分类实例详解

    本文实例讲述了php+mysql实现无限分类的方法.分享给大家供大家参考.具体分析如下: 1.数据库通过设置父类ID来进行唯一索引,然后使用函数的递归调用实现无限分类: 2.数据库设计通过特定格式进行排列,然后使用mysql查询关键函数:concat,程序实现比较简单,首先我们假设有这样的一个三级分类,新闻→PHP新闻→PHP6.0出来了. 如果我们要查找"PHP6.0出来了"这条新闻,我们先点击新闻,然后再点击PHP新闻,就可以查出来了,也就是说我们可以通过祖父类一级一级地往下找,反

  • PHP遍历XML文档所有节点的方法

    本文实例讲述了PHP遍历XML文档所有节点的方法.分享给大家供大家参考.具体实现方法如下: 1. contact.xml代码: <contact id="43956"> <personal> <name> <first>J</first> <middle>J</middle> <last>J</last> </name> <title>Manager<

  • thinkphp实现无限分类(使用递归)

    本文实例为大家分享了thinkphp实现无限分类的详细代码,希望对大家学习无限分类有所启发. 数据库:test 数据表:(tp_category): Common/conf/config.php 'DB_CONFIG2' => array( 'db_type' => 'mysql', 'db_user' => 'root', 'db_pwd' => '', 'db_host' => 'localhost', 'db_port' => '3306', 'db_name'

随机推荐