都道府県を扱う Perl モジュール Geography::JapanesePrefectures を PHP に移植してみた
<?php
class Geography_JapanesePrefectures
{
var $_prefectures = array(
array('id' => 1, 'name' => '北海道', 'region' => '北海道'),
array('id' => 2, 'name' => '青森県', 'region' => '東北'),
array('id' => 3, 'name' => '岩手県', 'region' => '東北'),
array('id' => 4, 'name' => '宮城県', 'region' => '東北'),
array('id' => 5, 'name' => '秋田県', 'region' => '東北'),
array('id' => 6, 'name' => '山形県', 'region' => '東北'),
array('id' => 7, 'name' => '福島県', 'region' => '東北'),
array('id' => 8, 'name' => '茨城県', 'region' => '関東'),
array('id' => 9, 'name' => '栃木県', 'region' => '関東'),
array('id' => 10, 'name' => '群馬県', 'region' => '関東'),
array('id' => 11, 'name' => '埼玉県', 'region' => '関東'),
array('id' => 12, 'name' => '千葉県', 'region' => '関東'),
array('id' => 13, 'name' => '東京都', 'region' => '関東'),
array('id' => 14, 'name' => '神奈川県', 'region' => '関東'),
array('id' => 15, 'name' => '新潟県', 'region' => '信越'),
array('id' => 16, 'name' => '富山県', 'region' => '北陸'),
array('id' => 17, 'name' => '石川県', 'region' => '北陸'),
array('id' => 18, 'name' => '福井県', 'region' => '北陸'),
array('id' => 19, 'name' => '山梨県', 'region' => '関東'), // 信越の場合も
array('id' => 20, 'name' => '長野県', 'region' => '信越'),
array('id' => 21, 'name' => '岐阜県', 'region' => '東海'),
array('id' => 22, 'name' => '静岡県', 'region' => '東海'),
array('id' => 23, 'name' => '愛知県', 'region' => '東海'),
array('id' => 24, 'name' => '三重県', 'region' => '東海'), // 近畿の場合も
array('id' => 25, 'name' => '滋賀県', 'region' => '近畿'),
array('id' => 26, 'name' => '京都府', 'region' => '近畿'),
array('id' => 27, 'name' => '大阪府', 'region' => '近畿'),
array('id' => 28, 'name' => '兵庫県', 'region' => '近畿'),
array('id' => 29, 'name' => '奈良県', 'region' => '近畿'),
array('id' => 30, 'name' => '和歌山県', 'region' => '近畿'),
array('id' => 31, 'name' => '鳥取県', 'region' => '中国'),
array('id' => 32, 'name' => '島根県', 'region' => '中国'),
array('id' => 33, 'name' => '岡山県', 'region' => '中国'),
array('id' => 34, 'name' => '広島県', 'region' => '中国'),
array('id' => 35, 'name' => '山口県', 'region' => '中国'),
array('id' => 36, 'name' => '徳島県', 'region' => '四国'),
array('id' => 37, 'name' => '香川県', 'region' => '四国'),
array('id' => 38, 'name' => '愛媛県', 'region' => '四国'),
array('id' => 39, 'name' => '高知県', 'region' => '四国'),
array('id' => 40, 'name' => '福岡県', 'region' => '九州'),
array('id' => 41, 'name' => '佐賀県', 'region' => '九州'),
array('id' => 42, 'name' => '長崎県', 'region' => '九州'),
array('id' => 43, 'name' => '熊本県', 'region' => '九州'),
array('id' => 44, 'name' => '大分県', 'region' => '九州'),
array('id' => 45, 'name' => '宮崎県', 'region' => '九州'),
array('id' => 46, 'name' => '鹿児島県', 'region' => '九州'),
array('id' => 47, 'name' => '沖縄県', 'region' => '沖縄'),
);
function prefectures()
{
return array_map(create_function('$p', 'return $p["name"];'), $this->_prefectures);
}
function regions()
{
return array_merge(array_unique(array_map(create_function('$p', 'return $p["region"];'), $this->_prefectures)));
}
function prefectures_in($region)
{
$pref = array_filter($this->_prefectures, create_function('$p', "return (\$p['region'] == '$region');"));
return array_merge(array_map(create_function('$p', 'return $p["name"];'), $pref));
}
function prefectures_id($prefecture)
{
foreach ($this->_prefectures as $pref) {
if ($pref['name'] == $prefecture) {
return $pref['id'];
}
}
}
}
?>
- 使い方
<?php
require_once 'Geography_JapanesePrefectures.php';
$geo = new Geography_JapanesePrefectures;
print_r($geo->prefectures());
// -> array(北海道, 青森県, 岩手県, ..., 鹿児島県, 沖縄県)
print_r($geo->regions());
// -> array(北海道, 東北, 関東, ..., 九州, 沖縄)
print_r($geo->prefectures_in('関東'));
// -> array(茨城県, 栃木県, 群馬県, 埼玉県, 千葉県, 東京都, 神奈川県, 山梨県)
print_r($geo->prefectures_id('東京都'));
// -> 13
?>
山梨県は関東なのかとか,三重県は東海なのかだとかこの辺りはいろいろあるらしいけど,オリジナルに合わせてあります.
全体的に create_function() 使いすぎてキモイことになっていまが,あまり気にしないでください.
特に,prefectures_in() のキモさはどうにかしたいところであります.
- Geography::JapanesePrefectures
http://search.cpan.org/~tokuhirom/Geography-JapanesePrefectures/lib/Geogra ...
- via: オレンジニュース
http://secure.ddo.jp/~kaku/tdiary/20060915.html#p09