>  기사  >  php教程  >  获取json数据所有的节点路径

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

WBOY
WBOY원래의
2016-06-06 19:38:16966검색

无 无 ?phpfunction 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; } $hea

<?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);
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.