以前、javascriptを使用してjsonデータのノードパスを取得する問題について説明しましたが、今日はさらに一歩進んで、phpがjsonデータのすべてのノードパスを取得する方法について説明します
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
関数 iterTree($data) { $retData = array(); $data = json_decode($data, true); if (!is_array($data) && empty($data)) { エコー 'エラー!' ."n"; } 他 { $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; } } 他 { $retData[] = $フィールド; } } } $retData を返す; }
//テストデータ $data = file_get_contents("http://restapi.ele.me/v1/restaurants?extras%5B%5D=food_activity&extras%5B%5D=restaura nt_activity&extras%5B%5D=認証&フィールド%5B%5D=id&フィールド%5B%5D=名前&フィールド ds%5B%5D=電話&フィールド%5B%5D=プロモーション情報&フィールド%5B%5D=URLの名前&フィールド%5B%5D=フレーバー&フィールド% 5B%5D=is_time_ensure&fields%5B%5D=is_premium&fields%5B%5D=image_path&fields%5B%5D=評価&ファイル lds%5B%5D=is_free_delivery&fields%5B%5D=minimum_order_amount&fields%5B%5D=order_lead_time&fields%5 B%5D=is_support_invoice&fields%5B%5D=is_new&fields%5B%5D=is_third_party_delivery&fields%5B% 5D=予約時間&フィールド%5B%5D=評価数&フィールド%5B%5D=住所&フィールド%5B%5D=月売上&フィールド% 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_pay ment&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); |
以上がこの記事の全内容ですが、皆さんに気に入っていただければ幸いです。