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

5年以前  |  阅读数:268 次  |  编程语言:PHP 

之前我们讲解过使用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分页显示制作详细讲解
SSH 登录失败:Host key verification failed
获取IMSI
将二进制数据转为16进制以便显示
获取IMEI
文件下载
贪吃蛇
双位运算符
PHP自定义函数获取搜索引擎来源关键字的方法
Java生成UUID
发送邮件
年的日历图
提取后缀名
在Zeus Web Server中安装PHP语言支持
让你成为最历害的git提交人
Yii2汉字转拼音类的实例代码
再谈PHP中单双引号的区别详解
指定应用ID以获取对应的应用名称
Python 2与Python 3版本和编码的对比
php封装的page分页类完整实例