PHP 郵便番号から住所情報を検索するメソッド

投稿者:

http://zip.cgis.biz/ ここで公開されている郵便番号→住所変換のAPIを利用
  /*
  * 郵便番号をAPIに送信して住所情報をもらう
  * @param string $zip
  * @return $address
  * 以下の電文を解析する
  *  <?xml version=”1.0″ encoding=”utf-8″ ?>
  * – <ZIP_result>
  *   <result name=”ZipSearchXML” />
  *   <result version=”1.01″ />
  *   <result request_url=”http%3A%2F%2Fzip.cgis.biz%2Fxml%2Fzip.php%3Fzn%3D1030000″ />
  *   <result request_zip_num=”1030000″ />
  *   <result request_zip_version=”none” />
  *   <result result_code=”1″ />
  *   <result result_zip_num=”1030000″ />
  *   <result result_zip_version=”0″ />
  *   <result result_values_count=”1″ />
  * – <ADDRESS_value>
  *   <value state_kana=”トウキョウト” />
  *   <value city_kana=”チュウオウク” />
  *   <value address_kana=”イカニケイサイガナイバアイ” />
  *   <value company_kana=”none” />
  *   <value state=”東京都” />
  *   <value city=”中央区” />
  *   <value address=”以下に掲載がない場合” />
  *   <value company=”none” />
  *     </ADDRESS_value>
  *   </ZIP_result>
  */
  function getAddressByZip($zip)
  {
    if(!$zip) return “”;
    $zip = str_replace(“-“,””,$zip);
    require_once “XML/Unserializer.php”;
    // APIに郵便番号を問い合わせる
    $url = “http://zip.cgis.biz/xml/zip.php?zn={$zip}”;
    
    // XMLを解析する
    $options = array(‘complexType’ => ‘array’);
    $xmldoc = join(“”,file($url));
    $Unserializer =& new XML_Unserializer($options);
    $Unserializer->setOption(‘parseAttributes’, true);
    $status = $Unserializer->unserialize($xmldoc);
    $data = $Unserializer->getUnserializedData();
    // 結果に住所情報がない場合はエラー
    if(!is_array($data[‘ADDRESS_value’])) return “”;
    // 結果の3階層目を解析して[state=>”東京都”]の形式で配列にして返却する
    $return_array = array();
    foreach($data[‘ADDRESS_value’] as $k=>$v){
      foreach($v as $k2=>$v2){
        foreach($v2 as $k3=>$v3){
          $return_array[$k3] = mb_convert_encoding($v3,’EUC-JP’,’UTF-8′);
        }
      }
    }
    return $return_array;
   }

Thank you for reading this post, don't forget to subscribe!