[PHP-users 18094]Re: 住所文字列の分割

titi @ beefarm.jp titi @ beefarm.jp
2003年 9月 26日 (金) 10:54:16 JST


kisumiです。こんにちは。


ちなみに、私が知っている地名には「市村(いちむら)」というものがあります
(笑)。都道府県以下にも落とし穴がいっぱい。。。


それか、気合で次のような処理で1つづつ取ってみてはいかがでしょうか?

郵便番号データーを眺めるのと、実際の住所文字列を眺めるのは数量的には同等
だと思いますから。ひょっとしたら少なくなるかも。


if(mb_ereg("^福岡県福岡市東区",$str))		//私、福岡在住なので
{
	$ad_code = "813";	//ついでに郵便番号のデーター代入
	
		$str1 = "福岡県";
		$str2 = "福岡市";
		$str3 = "東区";
		
}elseif(mb_ereg("^福岡県福岡市博多区",$str)){

	$ad_code = "811";	//たぶん811だったと。。
	
		$str1 = "福岡県";
		$str2 = "福岡市";
		$str3 = "博多区";
		
}

	

一編に処理せずに、都道府県や区や市町村に別けて個別に取って行くと良いので
は?

上記例は都道府県名を直接書き込んでいますが、別にテキストファイルで住所
データを用意して、処理そのものはループという方法だとプログラムはスッキリ
します。


例えば

810 \t 福岡県 \t 福岡市 \t 中央区 \n
811 \t 福岡県 \t 福岡市 \t 博多区 \n
812 \t 福岡県 \t 福岡市 \t ?区 \n
813 \t 福岡県 \t 福岡市 \t 東区 \n

こんなテキストファイルを用意しておき、読み込んでexpolde()させます。


$lines = file("ad.data");
for($i=0,$lines[$i],$i++){

	list($ad_code,$str1,$str2,$str3,) = explode($lines[$i]);
	
		if(mb_ereg($str1.$str2.$str3,$str)){

			//お好みの処理
			
		}

}

こんな感じで、ループ&マッチングは可能なのでは?ただし、かなりループを繰
り返すハメに(笑)。

急いで書いたのでタイプミスがあるかもしまれせんが、ご勘弁を。


>重松です。こんにちは。
>
>> CSVの住所データでは1つでつながっているのを
>> 都道府県、市区町村、市区町村以下 で分割してDBのテーブルにいれたいので
>> すが・・・
>
>人間でも、知らない住所の場合、どこまでが市で、どこまでが町だか、正確に区
>切れない気がするので、事実上不可能だと思います。
>
>めちゃくちゃ単純にするならば、
>
>	都道府県	都道府県間での文字列
>	市区町村	都道府県を除いてはじめての市区町村まで
>
>というような形で区切るしかないのではないかと思います。
># 無論、間違いだとかも起こるでしょうが。
>
>こういう処理には正規表現を使うと便利だと思います。
>
><?php
>
>$adr = "東京都新宿区百人町123";
>
>if (mb_ereg('(.+?[都道府県])(.+?[市区町村])(.*)', $adr, $matches)) {
>	var_dump($matches);
>}
>
>?>
>
>
>一番簡単なのは郵便番号があれば、そこから住所を取り出すことだと思います。
>
>-- 
>Osamu Shigematsu <m5issige @ mr.hitachi-medical.co.jp>
>
>_______________________________________________
>PHP-users mailing list
>PHP-users @ php.gr.jp
>http://ns1.php.gr.jp/mailman/listinfo/php-users


PHP-users メーリングリストの案内