質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

888閲覧

PHP JSONの多次元配列から値を取得したい

AIT

総合スコア1

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2022/06/28 13:42

JSONファイルを読み取り、多次元配列から
県名(name)と市町村名(city)のみをすべて表示させたいのです。

どうかご理解ある方いらっしゃいましたら教えて頂けませんでしょうか。
例)

[ "都道府県名A" => [市町村名1, 市町村名2...], "都道府県名B" => [市町村名3, 市町村名4...], ... ]

php

<?php $file = "./sample.json"; //jsonファイルへのパス $json = file_get_contents($file); //ile_get_contents関数を用いて、$fileの内容を文字列として読み込む $arr = json_decode($json,true) ;//$jsonの内容を連想配列として$arrに格納する

json

[{ "01": { "id": "01", "name": "北海道", "short": "北海道", "kana": "ホッカイドウ", "en": "hokkaido", "city":[ {"citycode":"0010001","city":"札幌市中央区"}, ⇣⇣ {"citycode":"0010106","city":"目梨郡"} ] }, "02": { "id": "02", "name": "青森県", "short": "青森", 以下略

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

arcxor

2022/06/28 14:00

JSON のデータ構造がよく分かりません。配列なのですか。オブジェクトなのですか。
AIT

2022/06/28 14:14

1つのオブジェクトの値がオブジェクトの配列になっている場合です! 上記の例のように取り出すにはvar_dumpを利用するべきでしょうか? よろしくお願いいたします。
yambejp

2022/06/29 00:30

「すべて表示させたい」 表示させるとは具体的にどういう結果を期待していますか?
AIT

2022/06/29 03:17

[ "都道府県名A" => [市町村名1, 市町村名2...], "都道府県名B" => [市町村名3, 市町村名4...], ] このような形で都道府県名(name)と市町村名(city)のみを取り出し表示したいです。
guest

回答2

0

ベストアンサー

ざっくり再帰処理

php

1<?PHP 2$json=<<<eof 3[ 4 { 5 "01": { 6 "name": "A", 7 "city":[ 8 {"city":"a1"}, 9 {"city":"a2"}, 10 {"city":"a3"} 11 ] 12 }, 13 "02": { 14 "name": "B", 15 "city":[ 16 {"city":"b1"}, 17 {"city":"b2"}, 18 {"city":"b3"} 19 ] 20 }, 21 "03": { 22 "name": "C", 23 "city":[ 24 {"city":"c1"}, 25 {"city":"c2"}, 26 {"city":"c3"} 27 ] 28 } 29 } 30 ] 31eof; 32$data=json_decode( $json,JSON_OBJECT_AS_ARRAY)[0]; 33function getData($data){ 34 $ret=[]; 35 foreach($data as $key=>$val){ 36 if(is_array($val)){ 37 $ret=array_merge($ret,getData($val)); 38 }else{ 39 if(in_array($key,["name","city"])) $ret[]=$val; 40 } 41 } 42 return $ret; 43} 44$result=getData($data); 45print_r($result);

投稿2022/06/29 02:44

編集2022/06/29 02:46
yambejp

総合スコア114784

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

AIT

2022/07/01 14:01

ありがとうございます!
guest

0

普通に県名をforなりforeachで回してその中で市町村名をforなりforeachで回せばいいだけではないでしょうか?

投稿2022/06/28 14:04

RiaFeed

総合スコア2701

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

AIT

2022/06/28 14:15

上記の例のような形で取り出すためにはどのようなコードになりますでしょうか? 教えていただけると幸いです。
RiaFeed

2022/06/28 15:37

元データこれですかね? https://qiita.com/next1ka2u/items/1d7e63c37d9a205219b6 下の感じでそれっぽく作れましたがどうでしょうか? $ret = array(); foreach ($arr[0] as $pkey => $pvalue) { $ret[$pvalue["name"]] = array(); foreach($pvalue["city"] as $cvalue) { $ret[$pvalue["name"]][] = $cvalue["city"]; } } var_dump($ret);
AIT

2022/07/01 14:01

ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問