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

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

新規登録して質問してみよう
ただいま回答率
85.35%
多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

PHP

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

Q&A

解決済

2回答

1993閲覧

PHP 多次元配列から値を取得する方法

bruno7777

総合スコア3

多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

PHP

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

0グッド

0クリップ

投稿2021/10/22 07:11

編集2021/10/22 08:30

前提・実現したいこと

JSONファイルから多次元配列を読み取り以下の形式で表示させたいのですが、どうしたら市町村名だけを取り出し全て表示させられるのかわかりません。どなたか方法をご存知であればヒント頂けると幸いです。

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

発生している問題・エラーメッセージ

PHPファイル

<?php $json = file_get_contents("sample.json"); $json = mb_convert_encoding($json, 'UTF8', 'ASCII,JIS,UTF-8,EUC-JP,SJIS-WIN'); $json = json_decode($json,true); foreach($json[0] as $key => $val){ echo $val["name"] . '=>' . $val["city"] ."<br/>" ; } ?>

該当のソースコード

Jsonファイル

[{ "01": { "id": "01", "name": "北海道", "short": "北海道", "kana": "ホッカイドウ", "en": "hokkaido", "city":[ {"citycode":"0010001","city":"札幌市中央区"}, {"citycode":"0010002","city":"札幌市北区"}, {"citycode":"0010003","city":"札幌市東区"}, {"citycode":"0010004","city":"札幌市白石区"}, {"citycode":"0010005","city":"札幌市豊平区"}, {"citycode":"0010006","city":"札幌市南区"}, {"citycode":"0010007","city":"札幌市西区"}, {"citycode":"0010008","city":"札幌市厚別区"}, {"citycode":"0010009","city":"札幌市手稲区"}, {"citycode":"0010010","city":"札幌市清田区"}, {"citycode":"0010011","city":"函館市"}, {"citycode":"0010012","city":"小樽市"}, {"citycode":"0010013","city":"旭川市"}, {"citycode":"0010014","city":"室蘭市"}, {"citycode":"0010015","city":"釧路市"}, {"citycode":"0010016","city":"帯広市"}, {"citycode":"0010017","city":"北見市"}, {"citycode":"0010018","city":"夕張市"}, {"citycode":"0010019","city":"岩見沢市"}, {"citycode":"0010020","city":"網走市"}, {"citycode":"0010021","city":"留萌市"}, {"citycode":"0010022","city":"苫小牧市"}, {"citycode":"0010023","city":"稚内市"}, {"citycode":"0010024","city":"美唄市"}, {"citycode":"0010025","city":"芦別市"}, {"citycode":"0010026","city":"江別市"}, {"citycode":"0010027","city":"赤平市"}, {"citycode":"0010028","city":"紋別市"}, {"citycode":"0010029","city":"士別市"}, {"citycode":"0010030","city":"名寄市"}, {"citycode":"0010031","city":"三笠市"}, {"citycode":"0010032","city":"根室市"}, {"citycode":"0010033","city":"千歳市"}, {"citycode":"0010034","city":"滝川市"}, {"citycode":"0010035","city":"砂川市"}, {"citycode":"0010036","city":"歌志内市"}, {"citycode":"0010037","city":"深川市"}, {"citycode":"0010038","city":"富良野市"}, {"citycode":"0010039","city":"登別市"}, {"citycode":"0010040","city":"恵庭市"}, {"citycode":"0010041","city":"伊達市"}, {"citycode":"0010042","city":"北広島市"}, {"citycode":"0010043","city":"石狩市"}, {"citycode":"0010044","city":"北斗市"}, {"citycode":"0010045","city":"石狩郡"}, {"citycode":"0010046","city":"松前郡"}, {"citycode":"0010047","city":"上磯郡"}, {"citycode":"0010048","city":"亀田郡"}, {"citycode":"0010049","city":"茅部郡"}, {"citycode":"0010050","city":"二海郡"}, {"citycode":"0010051","city":"山越郡"}, {"citycode":"0010052","city":"檜山郡"}, {"citycode":"0010053","city":"爾志郡"}, {"citycode":"0010054","city":"奥尻郡"}, {"citycode":"0010055","city":"瀬棚郡"}, {"citycode":"0010056","city":"久遠郡"}, {"citycode":"0010057","city":"島牧郡"}, {"citycode":"0010058","city":"寿都郡"}, {"citycode":"0010059","city":"磯谷郡"}, {"citycode":"0010060","city":"虻田郡"}, {"citycode":"0010061","city":"岩内郡"}, {"citycode":"0010062","city":"古宇郡"}, {"citycode":"0010063","city":"積丹郡"}, {"citycode":"0010064","city":"古平郡"}, {"citycode":"0010065","city":"余市郡"}, {"citycode":"0010066","city":"空知郡"}, {"citycode":"0010067","city":"夕張郡"}, {"citycode":"0010068","city":"樺戸郡"}, {"citycode":"0010069","city":"雨竜郡"}, {"citycode":"0010070","city":"上川郡"}, {"citycode":"0010071","city":"勇払郡"}, {"citycode":"0010072","city":"中川郡"}, {"citycode":"0010073","city":"増毛郡"}, {"citycode":"0010074","city":"留萌郡"}, {"citycode":"0010075","city":"苫前郡"}, {"citycode":"0010076","city":"天塩郡"}, {"citycode":"0010077","city":"宗谷郡"}, {"citycode":"0010078","city":"枝幸郡"}, {"citycode":"0010079","city":"礼文郡"}, {"citycode":"0010080","city":"利尻郡"}, {"citycode":"0010081","city":"網走郡"}, {"citycode":"0010082","city":"斜里郡"}, {"citycode":"0010083","city":"常呂郡"}, {"citycode":"0010084","city":"紋別郡"}, {"citycode":"0010085","city":"虻田郡"}, {"citycode":"0010086","city":"有珠郡"}, {"citycode":"0010087","city":"白老郡"}, {"citycode":"0010088","city":"沙流郡"}, {"citycode":"0010089","city":"新冠郡"}, {"citycode":"0010090","city":"浦河郡"}, {"citycode":"0010091","city":"様似郡"}, {"citycode":"0010092","city":"幌泉郡"}, {"citycode":"0010093","city":"日高郡"}, {"citycode":"0010094","city":"河東郡"}, {"citycode":"0010095","city":"河西郡"}, {"citycode":"0010096","city":"広尾郡"}, {"citycode":"0010097","city":"足寄郡"}, {"citycode":"0010098","city":"十勝郡"}, {"citycode":"0010099","city":"釧路郡"}, {"citycode":"0010100","city":"厚岸郡"}, {"citycode":"0010101","city":"川上郡"}, {"citycode":"0010102","city":"阿寒郡"}, {"citycode":"0010103","city":"白糠郡"}, {"citycode":"0010104","city":"野付郡"}, {"citycode":"0010105","city":"標津郡"}, {"citycode":"0010106","city":"目梨郡"} ] }, "02": { "id": "02", "name": "青森県", "short": "青森", "kana": "アオモリケン", "en": "aomori", "city":[ {"citycode":"0020001","city":"青森市"}, {"citycode":"0020002","city":"弘前市"}, {"citycode":"0020003","city":"八戸市"}, {"citycode":"0020004","city":"黒石市"}, {"citycode":"0020005","city":"五所川原市"}, {"citycode":"0020006","city":"十和田市"}, {"citycode":"0020007","city":"三沢市"}, {"citycode":"0020008","city":"むつ市"}, {"citycode":"0020009","city":"つがる市"}, {"citycode":"0020010","city":"平川市"}, {"citycode":"0020011","city":"東津軽郡"}, {"citycode":"0020012","city":"西津軽郡"}, {"citycode":"0020013","city":"中津軽郡"}, {"citycode":"0020014","city":"南津軽郡"}, {"citycode":"0020015","city":"北津軽郡"}, {"citycode":"0020016","city":"上北郡"}, {"citycode":"0020017","city":"下北郡"}, {"citycode":"0020018","city":"三戸郡"} ] }, "03": { "id": "03", "name": "岩手県", "short": "岩手", "kana": "イワテケン", "en": "iwate", "city":[ {"citycode":"0030001","city":"盛岡市"}, {"citycode":"0030002","city":"宮古市"}, {"citycode":"0030003","city":"大船渡市"}, {"citycode":"0030004","city":"花巻市"}, {"citycode":"0030005","city":"北上市"}, {"citycode":"0030006","city":"久慈市"}, {"citycode":"0030007","city":"遠野市"}, {"citycode":"0030008","city":"一関市"}, {"citycode":"0030009","city":"陸前高田市"}, {"citycode":"0030010","city":"釜石市"}, {"citycode":"0030011","city":"二戸市"}, {"citycode":"0030012","city":"八幡平市"}, {"citycode":"0030013","city":"奥州市"}, {"citycode":"0030014","city":"滝沢市"}, {"citycode":"0030015","city":"岩手郡"}, {"citycode":"0030016","city":"紫波郡"}, {"citycode":"0030017","city":"和賀郡"}, {"citycode":"0030018","city":"胆沢郡"}, {"citycode":"0030019","city":"西磐井郡"}, {"citycode":"0030020","city":"気仙郡"}, {"citycode":"0030021","city":"上閉伊郡"}, {"citycode":"0030022","city":"下閉伊郡"}, {"citycode":"0030023","city":"九戸郡"}, {"citycode":"0030024","city":"二戸郡"} ] }, 以下省略

試したこと

<?php foreach($json[0] as $key => $val){ foreach($val as $key1 => $key2) echo $val["name"] . '=>' . $key2 ."<br/>" ; } } ?> ```どうしていいかわからず上記のようにしてみたり、foreachにforをネストしてみましたが、やはり"city"の中身を取り出せませんでした... ### 補足情報(FW/ツールのバージョンなど) ここにより詳細な情報を記載してください。

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

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

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

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

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

yambejp

2021/10/22 08:26

そのデータの省略されかたをすると "都道府県名A" => [市町村名1, 市町村名2...], "都道府県名B" => [市町村名3, 市町村名4...], という結果をお伝えするとはできないですね
bruno7777

2021/10/22 08:33

失礼いたしました。 他の県のデータも追加しました。
guest

回答2

0

PHP

1$json=<<<eof 2[ 3 { 4 "01": { 5 "id": "01", 6 "name": "北海道", 7 "short": "北海道", 8 "kana": "ホッカイドウ", 9 "en": "hokkaido", 10 "city":[ 11 {"citycode":"0010001","city":"札幌市中央区"}, 12 {"citycode":"0010002","city":"札幌市北区"}, 13 {"citycode":"0010003","city":"札幌市東区"} 14 ] 15 }, 16 "02": { 17 "id": "02", 18 "name": "青森県", 19 "short": "青森", 20 "kana": "アオモリケン", 21 "en": "aomori", 22 "city":[ 23 {"citycode":"0020001","city":"青森市"}, 24 {"citycode":"0020002","city":"弘前市"}, 25 {"citycode":"0020003","city":"八戸市"} 26 ] 27 }, 28 "03": { 29 "id": "03", 30 "name": "岩手県", 31 "short": "岩手", 32 "kana": "イワテケン", 33 "en": "iwate", 34 "city":[ 35 {"citycode":"0030001","city":"盛岡市"}, 36 {"citycode":"0030002","city":"宮古市"}, 37 {"citycode":"0030003","city":"大船渡市"} 38 ] 39 } 40 }] 41eof; 42$data=json_decode($json,JSON_OBJECT_AS_ARRAY)[0]; 43$result=array_reduce(array_map(function($x){ 44 return $x["name"]; 45},$data),function($x,$y) use($data){ 46 $x[$y]=array_map(function($x){ 47 return array_map(function($x){ 48 return $x["city"]; 49 },$x["city"]); 50 },array_values(array_filter($data,function($x) use($y){ 51 return $x["name"]==$y; 52 })))[0]; 53 return $x; 54}); 55print_r($result);

投稿2021/10/22 08:55

編集2021/10/22 08:57
yambejp

総合スコア116724

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

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

bruno7777

2021/10/23 03:36

ご回答ありがとうございます。 私はphp初心者なためこちらのコードがあまり理解できませんがこれから学習していくにつれ参考になると思います。ご丁寧にありがとうございました!
guest

0

ベストアンサー

まず最初に表示したいフォーマットに沿ってデータを作ってしまうのがわかりやすいかもしれません。

diff

1$json = file_get_contents("sample.json"); 2$json = mb_convert_encoding($json, 'UTF8', 'ASCII,JIS,UTF-8,EUC-JP,SJIS-WIN'); 3$json = json_decode($json,true); 4 5+ $cities = []; 6+ foreach($json[0] as $_ => $arr) { 7+ $key = $arr['name']; 8+ $cities[$key] = []; 9+ 10+ foreach($arr['city'] as $city) { 11+ $cities[$key][]= $city['city']; 12+ } 13+ } 14 15- foreach($json[0] as $key => $val){ 16- echo $val["name"] . '=>' . $val["city"] ."<br/>" ; 17+ foreach($cities as $key => $val){ 18+ echo $key . ' => [' . implode(', ', $val) ."]<br/>" ; 19}
+ $cities = []; + foreach($json[0] as $_ => $arr) { + $key = $arr['name']; + $cities[$key] = []; + + foreach($arr['city'] as $city) { + $cities[$key][]= $city['city']; + } + }

ここの部分で表示したい内容の連想配列の形に形成しています。
あとは表示するだけです。

※動かしていないので、エラーが出るかもしれないです。

投稿2021/10/22 07:58

satoshih

総合スコア799

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

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

bruno7777

2021/10/23 02:31

回答ありがとうございます。 こういう方法もあるんですね!とても参考になります。 とても初歩的な質問で申し訳ないのですが、 $cities[$key][]= $city['city'];の部分の[]は何の役割があるんでしょうか?
satoshih

2021/10/23 02:54

配列に要素を追加する書き方です。 $a = []; $a[] = "aaaa"; var_dump($a); とすると$aは下記のようになります array(1) { [0]=> string(4) "aaaa" }
bruno7777

2021/10/23 03:29

回答ありがとうございます。 なるほど、要素を追加しているんですね! わかりやすく説明して頂きありがとうございました。スッキリしました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問