PR

[PHP]住所を都道府県・市区町村などに分ける

PHPで住所を都道府県・市区町村などに分けるには、以下のようにexplode()関数を使用する方法があります。

$address = "東京都千代田区丸の内1-9-1 丸ビル36F";
$elements = explode(" ", $address);

$prefecture = $elements[0]; // 都道府県
$city = $elements[1]; // 市区町村
$town = $elements[2]; // 町名・番地
$building = $elements[3]; // 建物名・号室

echo $prefecture; // 東京都
echo $city; // 千代田区丸の内1-9-1
echo $town; // 丸ビル36F
echo $building; // 空文字列(今回の住所には建物名・号室が含まれていないため)

explode()関数は、指定した区切り文字(この場合はスペース)で文字列を分割し、配列として返します。住所をスペースで分割することで、都道府県、市区町村、町名・番地、建物名・号室などの要素に分割することができます。上記の例では、住所が「東京都千代田区丸の内1-9-1 丸ビル36F」である場合に、各要素を配列から取り出して変数に代入しています。

ただし、住所のフォーマットは地域やデータソースによって異なる場合があるため、上記の例が必ずしも全ての住所に対応するわけではありません。また、住所を正しく分割するには、より高度なアルゴリズムやライブラリを使用する必要がある場合もあります。

<?php

/**
 * @param string $address
 * @return array
 */
function separate_address(string $address)
{
    if (preg_match('@^(.{2,3}?[都道府県])(.+?郡.+?[町村]|.+?市.+?区|.+?[市区町村])(.+)@u', $address, $matches) !== 1) {
        return [
            'state' => null,
            'city' => null,
            'other' => null
        ];
    }

    return [
        'state' => $matches[1],
        'city' => $matches[2],
        'other' => $matches[3],
    ];
}

登録されている住所からユーザーの検索用に住所を分割してみた。

コメント

タイトルとURLをコピーしました