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

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

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

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

PHP

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

Q&A

解決済

2回答

2462閲覧

多次元配列を特定の配列にセットして表示したい

bruno7777

総合スコア3

多次元配列

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

PHP

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

0グッド

0クリップ

投稿2021/11/10 07:32

Jsonファイルの多次元配列を以下の配列形式にセットして表示したいです。

"北海道地方" => [
"県名" => [県名1, ...],
"市町村名" => [市町村名1, ...],
...
"東北地方" => [
"県名" => [県名2, ...],
"市町村名" => [市町村名2, ...],
...
]

前回質問をさせて頂いき,それを参考に地方の配列を新しく作り、その地方の配列とJsonファイルから取り出した配列を上記の配列形式にセットしてみようとコードを組んでみましたが、なかなか思った通りのコードが書けません。どなたかご教授いただければ幸いです。
前回の質問

JSON

1[{ 2 "01": { 3 "id": "01", 4 "name": "北海道", 5 "short": "北海道", 6 "kana": "ホッカイドウ", 7 "en": "hokkaido", 8 "city":[ 9 {"citycode":"0010001","city":"札幌市中央区"}, 10 {"citycode":"0010002","city":"札幌市北区"}, 11 {"citycode":"0010003","city":"札幌市東区"}, 12 {"citycode":"0010004","city":"札幌市白石区"}, 13 {"citycode":"0010005","city":"札幌市豊平区"}, 14 {"citycode":"0010006","city":"札幌市南区"}, 15 {"citycode":"0010007","city":"札幌市西区"}, 16 {"citycode":"0010008","city":"札幌市厚別区"}, 17 {"citycode":"0010009","city":"札幌市手稲区"}, 18 {"citycode":"0010010","city":"札幌市清田区"}, 19 {"citycode":"0010011","city":"函館市"}, 20 {"citycode":"0010012","city":"小樽市"}, 21 {"citycode":"0010013","city":"旭川市"}, 22 {"citycode":"0010014","city":"室蘭市"}, 23 {"citycode":"0010015","city":"釧路市"}, 24 {"citycode":"0010016","city":"帯広市"}, 25 {"citycode":"0010017","city":"北見市"}, 26 {"citycode":"0010018","city":"夕張市"}, 27 {"citycode":"0010019","city":"岩見沢市"}, 28 {"citycode":"0010020","city":"網走市"}, 29 {"citycode":"0010021","city":"留萌市"}, 30 {"citycode":"0010022","city":"苫小牧市"}, 31 {"citycode":"0010023","city":"稚内市"}, 32 {"citycode":"0010024","city":"美唄市"}, 33 {"citycode":"0010025","city":"芦別市"}, 34 {"citycode":"0010026","city":"江別市"}, 35 {"citycode":"0010027","city":"赤平市"}, 36 {"citycode":"0010028","city":"紋別市"}, 37 {"citycode":"0010029","city":"士別市"}, 38 {"citycode":"0010030","city":"名寄市"}, 39 {"citycode":"0010031","city":"三笠市"}, 40 {"citycode":"0010032","city":"根室市"}, 41 {"citycode":"0010033","city":"千歳市"}, 42 {"citycode":"0010034","city":"滝川市"}, 43 {"citycode":"0010035","city":"砂川市"}, 44 {"citycode":"0010036","city":"歌志内市"}, 45 {"citycode":"0010037","city":"深川市"}, 46 {"citycode":"0010038","city":"富良野市"}, 47 {"citycode":"0010039","city":"登別市"}, 48 {"citycode":"0010040","city":"恵庭市"}, 49 {"citycode":"0010041","city":"伊達市"}, 50 {"citycode":"0010042","city":"北広島市"}, 51 {"citycode":"0010043","city":"石狩市"}, 52 {"citycode":"0010044","city":"北斗市"}, 53 {"citycode":"0010045","city":"石狩郡"}, 54 {"citycode":"0010046","city":"松前郡"}, 55 {"citycode":"0010047","city":"上磯郡"}, 56 {"citycode":"0010048","city":"亀田郡"}, 57 {"citycode":"0010049","city":"茅部郡"}, 58 {"citycode":"0010050","city":"二海郡"}, 59 {"citycode":"0010051","city":"山越郡"}, 60 {"citycode":"0010052","city":"檜山郡"}, 61 {"citycode":"0010053","city":"爾志郡"}, 62 {"citycode":"0010054","city":"奥尻郡"}, 63 {"citycode":"0010055","city":"瀬棚郡"}, 64 {"citycode":"0010056","city":"久遠郡"}, 65 {"citycode":"0010057","city":"島牧郡"}, 66 {"citycode":"0010058","city":"寿都郡"}, 67 {"citycode":"0010059","city":"磯谷郡"}, 68 {"citycode":"0010060","city":"虻田郡"}, 69 {"citycode":"0010061","city":"岩内郡"}, 70 {"citycode":"0010062","city":"古宇郡"}, 71 {"citycode":"0010063","city":"積丹郡"}, 72 {"citycode":"0010064","city":"古平郡"}, 73 {"citycode":"0010065","city":"余市郡"}, 74 {"citycode":"0010066","city":"空知郡"}, 75 {"citycode":"0010067","city":"夕張郡"}, 76 {"citycode":"0010068","city":"樺戸郡"}, 77 {"citycode":"0010069","city":"雨竜郡"}, 78 {"citycode":"0010070","city":"上川郡"}, 79 {"citycode":"0010071","city":"勇払郡"}, 80 {"citycode":"0010072","city":"中川郡"}, 81 {"citycode":"0010073","city":"増毛郡"}, 82 {"citycode":"0010074","city":"留萌郡"}, 83 {"citycode":"0010075","city":"苫前郡"}, 84 {"citycode":"0010076","city":"天塩郡"}, 85 {"citycode":"0010077","city":"宗谷郡"}, 86 {"citycode":"0010078","city":"枝幸郡"}, 87 {"citycode":"0010079","city":"礼文郡"}, 88 {"citycode":"0010080","city":"利尻郡"}, 89 {"citycode":"0010081","city":"網走郡"}, 90 {"citycode":"0010082","city":"斜里郡"}, 91 {"citycode":"0010083","city":"常呂郡"}, 92 {"citycode":"0010084","city":"紋別郡"}, 93 {"citycode":"0010085","city":"虻田郡"}, 94 {"citycode":"0010086","city":"有珠郡"}, 95 {"citycode":"0010087","city":"白老郡"}, 96 {"citycode":"0010088","city":"沙流郡"}, 97 {"citycode":"0010089","city":"新冠郡"}, 98 {"citycode":"0010090","city":"浦河郡"}, 99 {"citycode":"0010091","city":"様似郡"}, 100 {"citycode":"0010092","city":"幌泉郡"}, 101 {"citycode":"0010093","city":"日高郡"}, 102 {"citycode":"0010094","city":"河東郡"}, 103 {"citycode":"0010095","city":"河西郡"}, 104 {"citycode":"0010096","city":"広尾郡"}, 105 {"citycode":"0010097","city":"足寄郡"}, 106 {"citycode":"0010098","city":"十勝郡"}, 107 {"citycode":"0010099","city":"釧路郡"}, 108 {"citycode":"0010100","city":"厚岸郡"}, 109 {"citycode":"0010101","city":"川上郡"}, 110 {"citycode":"0010102","city":"阿寒郡"}, 111 {"citycode":"0010103","city":"白糠郡"}, 112 {"citycode":"0010104","city":"野付郡"}, 113 {"citycode":"0010105","city":"標津郡"}, 114 {"citycode":"0010106","city":"目梨郡"} 115 ] 116 }, 117 "02": { 118 "id": "02", 119 "name": "青森県", 120 "short": "青森", 121 "kana": "アオモリケン", 122 "en": "aomori", 123 "city":[ 124 {"citycode":"0020001","city":"青森市"}, 125 {"citycode":"0020002","city":"弘前市"}, 126 {"citycode":"0020003","city":"八戸市"}, 127 {"citycode":"0020004","city":"黒石市"}, 128 {"citycode":"0020005","city":"五所川原市"}, 129 {"citycode":"0020006","city":"十和田市"}, 130 {"citycode":"0020007","city":"三沢市"}, 131 {"citycode":"0020008","city":"むつ市"}, 132 {"citycode":"0020009","city":"つがる市"}, 133 {"citycode":"0020010","city":"平川市"}, 134 {"citycode":"0020011","city":"東津軽郡"}, 135 {"citycode":"0020012","city":"西津軽郡"}, 136 {"citycode":"0020013","city":"中津軽郡"}, 137 {"citycode":"0020014","city":"南津軽郡"}, 138 {"citycode":"0020015","city":"北津軽郡"}, 139 {"citycode":"0020016","city":"上北郡"}, 140 {"citycode":"0020017","city":"下北郡"}, 141 {"citycode":"0020018","city":"三戸郡"} 142 ] 143 }, 144 "03": { 145 "id": "03", 146 "name": "岩手県", 147 "short": "岩手", 148 "kana": "イワテケン", 149 "en": "iwate", 150 "city":[ 151 {"citycode":"0030001","city":"盛岡市"}, 152 {"citycode":"0030002","city":"宮古市"}, 153 {"citycode":"0030003","city":"大船渡市"}, 154 {"citycode":"0030004","city":"花巻市"}, 155 {"citycode":"0030005","city":"北上市"}, 156 {"citycode":"0030006","city":"久慈市"}, 157 {"citycode":"0030007","city":"遠野市"}, 158 {"citycode":"0030008","city":"一関市"}, 159 {"citycode":"0030009","city":"陸前高田市"}, 160 {"citycode":"0030010","city":"釜石市"}, 161 {"citycode":"0030011","city":"二戸市"}, 162 {"citycode":"0030012","city":"八幡平市"}, 163 {"citycode":"0030013","city":"奥州市"}, 164 {"citycode":"0030014","city":"滝沢市"}, 165 {"citycode":"0030015","city":"岩手郡"}, 166 {"citycode":"0030016","city":"紫波郡"}, 167 {"citycode":"0030017","city":"和賀郡"}, 168 {"citycode":"0030018","city":"胆沢郡"}, 169 {"citycode":"0030019","city":"西磐井郡"}, 170 {"citycode":"0030020","city":"気仙郡"}, 171 {"citycode":"0030021","city":"上閉伊郡"}, 172 {"citycode":"0030022","city":"下閉伊郡"}, 173 {"citycode":"0030023","city":"九戸郡"}, 174 {"citycode":"0030024","city":"二戸郡"} 175 ] 176 }, 177 178以下省略

PHP

1<?php 2//1. jsonファイルを読み込んで各都道府県名(キー名:name)を表示させる 3$json = file_get_contents("sample.json"); 4$json = mb_convert_encoding($json, 'UTF8', 'ASCII,JIS,UTF-8,EUC-JP,SJIS-WIN'); 5$json = json_decode($json,true); 6 7foreach ($json[0] as $key => $val){ 8 echo $key . ':' . $val["name"] . "<br/>"; 9} 10echo "<br/>"; 11// 2. 下記の形式に配列にセットして表示させる 12/*[ 13 "都道府県名A" => [市町村名1, 市町村名2...], 14 "都道府県名B" => [市町村名3, 市町村名4...], 15 ... 16]*/ 17$cities = []; 18foreach($json[0] as $_ => $arr){ 19 $key = $arr['name']; 20 $cities[$key] = []; 21 22 foreach($arr['city'] as $city){ 23 $cities[$key][]=$city['city']; 24 } 25} 26 27foreach($cities as $key => $val){ 28 echo $key . '=> [' . implode(', ', $val) ."]<br/>"; 29} 30 echo "<br/>"; 31/*3. 下記の形式に配列にセットして表示させる 32 [ 33 "北海道地方" => [ 34 "県名" => [県名1, ...], 35 "市町村名" => [市町村名1, ...], 36 ... 37 "東北地方" => [ 38 "県名" => [県名2, ...], 39 "市町村名" => [市町村名2, ...], 40 ... 41 ... 42 ]*/ 43$region = [ 44 '北海道地方'=> ['北海道'], 45 '東北地方' => ['青森県', '岩手県','宮城県','秋田県','山形県','福島県'], 46 '関東地方'=>['茨城県','栃木県', '群馬県','埼玉県','千葉県', '東京都', '神奈川県'], 47 '中部地方'=>['新潟県','富山県','石川県','福井県','山梨県','長野県','岐阜県','静岡県', '愛知県'], 48 '近畿地方'=>['三重県','滋賀県','京都府','大阪府','兵庫県','奈良県','和歌山県'], 49 '中国・四国地方'=>['鳥取県','島根県','岡山県','広島県','山口県','徳島県','香川県','愛媛県', '高知県'], 50 '九州・沖縄地方'=>['福岡県','佐賀県','長崎県','熊本県','大分県','宮崎県','鹿児島県', '沖縄県'] 51]; 52 53foreach($region as $region_name => $prefectures) { 54 foreach($prefectures as $prefecture){ 55 foreach($cities as $key => $val){ 56 echo $region_name . '=> ['. '県名 => '. $prefecture . '=> [' . implode(', ', $val) ."]<br/>"; 57 echo "<br/>"; 58 } 59 } 60} 61?>

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

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

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

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

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

yambejp

2021/11/10 07:40 編集

前も指摘したかもしれませんが、東北地方でまとめたときに、市町村名は県別ではなく羅列(青森、秋田、宮城などの市町村が雑多にリスト化される)になってしまいますがそんな使い勝手の悪いデータに変換して本当に大丈夫なんですか?
guest

回答2

0

ベストアンサー

こちらでいかがでしょうか。

php

1<?php 2 3$json = file_get_contents("sample.json"); 4$json = mb_convert_encoding($json, 'UTF8', 'ASCII,JIS,UTF-8,EUC-JP,SJIS-WIN'); 5$json = json_decode($json,true)[0]; 6 7$regions = [ 8 '北海道地方'=> ['北海道'], 9 '東北地方' => ['青森県', '岩手県','宮城県','秋田県','山形県','福島県'], 10 '関東地方'=>['茨城県','栃木県', '群馬県','埼玉県','千葉県', '東京都', '神奈川県'], 11 '中部地方'=>['新潟県','富山県','石川県','福井県','山梨県','長野県','岐阜県','静岡県', '愛知県'], 12 '近畿地方'=>['三重県','滋賀県','京都府','大阪府','兵庫県','奈良県','和歌山県'], 13 '中国・四国地方'=>['鳥取県','島根県','岡山県','広島県','山口県','徳島県','香川県','愛媛県', '高知県'], 14 '九州・沖縄地方'=>['福岡県','佐賀県','長崎県','熊本県','大分県','宮崎県','鹿児島県', '沖縄県'] 15]; 16 17$results = []; 18foreach ($regions as $region => $prefectures) { 19 foreach($json as $_ => $item) { 20 $prefecture = $item['name']; 21 $cities = array_map(function ($city) { 22 return $city['city']; 23 }, $item['city']); 24 25 if (empty($results[$region])) { 26 $results[$region] = [ 27 '県名' => [], 28 '市町村名' => [], 29 ]; 30 } 31 32 if (in_array($prefecture, $prefectures)) { 33 $results[$region]['県名'][] = $prefecture; 34 $results[$region]['市町村名'] = array_merge($results[$region]['市町村名'], $cities); 35 } 36 } 37} 38 39var_dump($results);

投稿2021/11/10 09:01

ggg-mzkr

総合スコア38

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

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

bruno7777

2021/11/11 07:19 編集

回答ありがとうございます! 大変恐縮ですが、この部分は何を定義しているのかご教示頂けますでしょうか? なぜこう定義する事で$citiesに市町村だけが格納される(citycodeは省かれ)のかがわかりません... $cities = array_map(function ($city) { return $city['city']; }, $item['city']); 初歩的な質問で申し訳ありません。
ggg-mzkr

2021/11/11 07:45 編集

`array_map()`関数のドキュメントはこちらになります。 https://www.php.net/manual/ja/function.array-map.php PHPは組み込み関数のドキュメントが豊富なので、とりあえずドキュメントを見る事を癖にすると、学びが深まると思います。 さて、こちらの関数を1言で表すと『配列の要素一つ一つに、関数を適用して配列の変換を行う』関数です。 簡単な例として、『引数に1を加えた数を返す`add1`関数』と『1~5が要素に含まれる配列』を使って`array_map()`を呼び出すと、1~5の各要素に1が加えられた新しい配列が返り値となります。 ```php <?php function add1($n) { return $n + 1; } $numbers = [1, 2, 3, 4, 5]; $result = array_map('add1', $numbers); // $result = [add1(1), add1(2), add1(3), add1(4), add1(5)] こんなイメージ print_r($result); /* Array ( [0] => 2 [1] => 3 [2] => 4 [3] => 5 [4] => 6 ) ``` 件のコードでは、『citycodeとcityが入った配列を要素としてもつ配列』と『配列からcityキーのみを返す関数』を使って`array_map`しているので、citycodeとcityが入った配列からcityキーのみを取り出した配列が返り値となります。 このようなmap系の処理は、PHPに限らず様々な言語で使われるので、おぼえておいて損はないと思います。 どうしても理解が難しければ`foreach`などのループを使った処理に書き換えてもよいと思います。 頑張ってください。
bruno7777

2021/11/12 02:06

回答ありがとうございます。 なるほど、配列からcityキーのみを返す関数を使っていたんですね! やっと理解でしました。 今後はドキュメントを見る癖付けをして色々知識を増やしていきたいと思います。 ご丁寧に説明して頂き本当にありがとうございました。
guest

0

一般的に大量のデータを検索性をあげて管理するためにはRDB(SQL)を使います。
検討してみてください

投稿2021/11/10 07:42

yambejp

総合スコア116724

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

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

bruno7777

2021/11/11 07:12

検討してみます。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問