市町村コードの対応データをjsonで書きだしてみる - Qiitaで作った全国地方公共団体コードjsonを使って都道府県名、区市町村名から市町村コードを吐き出す関数を考えてみたものの - Qiita同一都道府県に同一名称の区があるところがあるのので、そのままでは使えなさそう。
しかたがないので全国地方公共団体コードjsonを吐き出す方法を見直してみた。
方針としては区の場合は所属する市名を頭に追加する。
そのために、区で終わる市区町村目を探して、その区が所属する市名を取得
区で終わる市区町村名の頭に、その区が所属する市名を追加
といった手順で良いのかな
- 特別区の区域(区部全体のこと)および政令指定都市には 100 が、区には 101 からの連番が与えられる
- 都道府県に指定都市が複数ある場合は、これまでは2市の例外を除き 100 と 130 が与えられている
- 都道府県内第3の指定都市として現在唯一である相模原市には、(160 ではなく)150 が与えられた
- 堺市の場合、例外として 140 が割り振られた。
さらに東京23区の場合には頭に市名をつけない、ということで、こんな感じ。
citycode2.php
<?php
$pref_ids= array(
"01" => "北海道",
"02" => "青森県",
"03" => "岩手県",
"04" => "宮城県",
"05" => "秋田県",
"06" => "山形県",
"07" => "福島県",
"08" => "茨城県",
"09" => "栃木県",
"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" => "宮崎県",
"46" => "鹿児島県",
"47" => "沖縄県"
);
$city_code = [];
foreach ($pref_ids as $pkey => $pvalue) {
$req = 'http://www.land.mlit.go.jp/webland/api/CitySearch?area='.$pkey;
$json = file_get_contents($req);
$json = mb_convert_encoding($json, 'UTF8', 'ASCII,JIS,UTF-8,EUC-JP,SJIS-WIN');
$addcode = json_decode($json, true);
foreach ($addcode['data'] as $key => $value) {
if($key <> "13"){
$ku=preg_grep('/区$/', $value);
if($ku){
$sikii = 30;
if($key === "27"){
$sikii = 40;
}
if(intval(substr($addcode['data'][$key]['id'], -3, 3)) > 150){
$cityid = substr($addcode['data'][$key]['id'], 0, -2)."50";
}elseif (intval(substr($addcode['data'][$key]['id'], -3, 3)) > 100 + $sikii) {
$cityid = substr($addcode['data'][$key]['id'], 0, -2).strval($sikii);
}else {
$cityid = substr($addcode['data'][$key]['id'], 0, -2)."00";
}
$addcode['data'][$key]['name'] = array_search($cityid,array_column($addcode['data'],'id','name')).$addcode['data'][$key]['name'];
}
}
echo $pvalue.','.$addcode['data'][$key]['id'].','.$addcode['data'][$key]['name'].'<br>' ;
}
$city_code += array($pkey =>array("pref-code" => $pkey , "pref-name" => $pvalue ,'data' => $addcode['data']));
}
$arr = json_encode($city_code, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
file_put_contents("citycode.json" , $arr);
ついでにjsonファイルを書き出すだけでなく、ブラウザにCSV形式で表示するようにしてみました。
まだちゃんと検証してないですが、何か間違えがあったらご指摘ください。