01hana
@01hana

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

配列の格納方法について

Q&A

Closed

解決したいこと

PHPで都道府県のjsonデータを読み込み、下記のような配列を作成したいです。
そこでforeachとifを使い順次配列に格納したいのですが、一部しか格納されません。
 
例:下記に記載のif($key <= 7)であれば、キー7しか格納されません。

こちらの解決方法を教えてください。

【作成したい配列】
[
"北海道地方" => [
"県名" => [県名1, ...],
"市町村名" => [市町村名1, ...],
...
]

###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":"札幌市豊平区"},
         ・・・・            
        ]
    },
        "02": {
        "id": "02",
        "name": "青森県",
        "short": "青森",
        "kana": "アオモリケン",
        "en": "aomori",
        "city":[
            {"citycode":"0020001","city":"青森市"},
            {"citycode":"0020002","city":"弘前市"},
            {"citycode":"0020003","city":"八戸市"},
            {"citycode":"0020004","city":"黒石市"},
            {"citycode":"0020005","city":"五所川原市"},
            ・・・・

該当するソースコード

$area = [
    "北海道地方" => [
        "県名",
        "市区町村名"
    ],
    "東北地方" => [
        "県名",
        "市区町村名"
    ],
    "関東地方" => [
        "県名",
        "市区町村名"
    ],
    "中部地方" => [
        "県名",
        "市区町村名"
    ],
    "関西地方" => [
        "県名",
        "市区町村名"
    ],
    "中国地方" => [
        "県名",
        "市区町村名"
    ],
    "四国地方" => [
        "県名",
        "市区町村名"
    ],
    "九州・沖縄地方" => [
        "県名",
        "市区町村名"
    ]
];

foreach ($json[0] as $key => $val) {
    $city = array_column($val["city"], "city");

    if ($key <= 1) {
        $area["北海道地方"]["県名"] = $val["name"];
        $area["北海道地方"]["市区町村名"] = $city;
    } elseif ($key <= 7) {
        $area["東北地方"]["県名"] = $val["name"];
        $area["東北地方"]["市区町村名"] = $city;
    } elseif ($key <= 14) {
        $area["関東地方"]["県名"] = $val["name"];
        $area["関東地方"]["市区町村名"] = $city;
    } elseif ($key <= 23) {
        $area["中部地方"]["県名"] = $val["name"];
        $area["中部地方"]["市区町村名"] = $city;
    } elseif ($key <= 30) {
        $area["関西地方"]["県名"] = $val["name"];
        $area["関西地方"]["市区町村名"] = $city;
    } elseif ($key <= 35) {
        $area["中国地方"]["県名"] = $val["name"];
        $area["中国地方"]["市区町村名"] = $city;
    } elseif ($key <= 39) {
        $area["四国地方"]["県名"] = $val["name"];
        $area["四国地方"]["市区町村名"] = $city;
    } else {
        $area["九州・沖縄地方"]["県名"] = $val["name"];
        $area["九州・沖縄地方"]["市区町村名"] = $city;
    }
}
0

1Answer

    } elseif ($key <= 7) {
        $area["東北地方"]["県名"] = $val["name"];
        $area["東北地方"]["市区町村名"] = $city;
    }

これは単純に上書きしていくだけなので、最後に処理された$key7の値が格納されていることになります。
配列に追加していく方法は、例えば次のようにします。

$array1 = [];
$array1[] = 1;
$array1[] = 3;
$array1[] = 5;
var_dump($array1); // [1, 3, 5]

$array2 = [
    'key' => [],
];
$array2['key'][] = 'a';
$array2['key'][] = 'b';
$array2['key'][] = 'c';
var_dump($array2); // ['key' => ['a', 'b', 'c']]

PHP: 配列 - Manual

1Like

Comments

  1. @01hana

    Questioner

    ご丁寧にご回答いただきまして、ありがとうございます!
    無事に解決できました!

Your answer might help someone💌