電話を制御する

最近1年間、インターネットとは少し逸脱した案件を受けております。
なにかといいますと馴染みのある例をあげますと

「宅配便の不在票などで再配達の日付や時間帯を受話器のキーで選択させるシステム」

です。実際は、宅配業者ではなく、飲食店をチェーン展開している企業になります。
かかってきた電話に対しスタッフがでることができないケースは多々あります。
そのため「予約」や「折返し希望」などをシステムで受けて、必要であれば、スタッフが後ほど電話することが可能です。
つまりビジネスロスの低減につながります。

また、複数の部署をお持ちの企業の場合、1本の電話で要件毎に転送先を選択させることも可能です。

上記のような電話の応対(コールセンター)システムをお探しの場合は、当オフィスまでお気軽にお問い合わせください。
Twilioをベースに貴社にあったシステムを提案・構築致します。

PHP で住所から都道府県を取り除く

住所から都道府県を取り除くサンプルは検索するとたくさんヒットしますが、次の条件でのご依頼があり、悩みましたのでここに記載しておきます。

  • (都道府県)+(市区町村から番地)+(建物名から部屋番号)が1つの文字列である。
  • (都道府県)が記載されている場合とない場合がある。
  • (建物名)に都道府県の名称が含まれている場合がある。

上の条件の住所を「(市区町村から番地)+(建物名から部屋番号)」で統一したい」がご依頼内容です。
「鹿児島県鹿児島市~」もあれば「鹿児島市~」もあり、さらに建物名に「鹿児島県」があったり・・・。
検索すると正規表現を利用しての例などいろいろありましたが、結果的に以下のコードに落ち着きました。
要は住所の頭3文字を抽出し、該当する都道府県名を選出。選出した都道府県名の文字列を取得して、住所の先頭からその文字列分を抽出し選出した文字列と比較し処理する方法です。文章で説明するよりコードをみた方がわかると思います。

<?php
define( '_CHARSET', 'UTF-8' );

function setPref( $mode ){
	$pref = array(
				1 => '北海道',
				2 => '青森県',
				3 => '岩手県',
				4 => '宮城県',
				5 => '秋田県',
				6 => '山形県',
				7 => '福島県',
				8 => '茨城県',
				9 => '栃木県',
				10 => '群馬県',
				11 => '埼玉県',
				12 => '千葉県',
				13 => '東京都',
				14 => '神奈川県',
				15 => '新潟県',
				16 => '富山県',
				17 => '石川県',
				18 => '福井県',
				19 => '山梨県',
				20 => '長野県',
				21 => '岐阜県',
				22 => '静岡県',
				23 => '愛知県',
				24 => '三重県',
				25 => '滋賀県',
				26 => '京都府',
				27 => '大阪府',
				28 => '兵庫県',
				29 => '奈良県',
				30 => '和歌山県',
				31 => '鳥取県',
				32 => '島根県',
				33 => '岡山県',
				34 => '広島県',
				35 => '山口県',
				36 => '徳島県',
				37 => '香川県',
				38 => '愛媛県',
				39 => '高知県',
				40 => '福岡県',
				41 => '佐賀県',
				42 => '長崎県',
				43 => '熊本県',
				44 => '大分県',
				45 => '宮崎県',
				46 => '鹿児島県',
				47 => '沖縄県'
			);
	if( $mode == 1 ){
		$pref[14] = '神奈川';
		$pref[30] = '和歌山';
		$pref[46] = '鹿児島';
	}
	return( $pref );
}

function prefFormat( $str = '' ){
	$address = '';
	if( strlen( $str ) > 0 ){
		$add         = $str;
		$prefListAll = setPref( 0 );
		$prefList3tx = setPref( 1 );
		$cutFirstAdd = mb_substr( $str, 0, 3, _CHARSET );
		$prefNo      = array_search( $cutFirstAdd, $prefList3tx );
		if( $prefNo > 0 && $prefNo <= count( $prefList3tx ) ){
			$prefLen = mb_strlen( $prefListAll[$prefNo], _CHARSET );
			$cutStr  = mb_substr( $str, 0, $prefLen, _CHARSET );
			if( $prefListAll[$prefNo] == $cutStr ){
				$add = mb_substr( $str, mb_strlen( $prefListAll[$prefNo], _CHARSET ), mb_strlen( $str, _CHARSET ), _CHARSET );
			}
		}
		$address = mb_convert_kana( $add, 'KVas', _CHARSET );
	}
	return( $address );
}

$str = '神奈川県相模原市中央区淵野辺1-19-25 神奈川県のある建物';
echo( prefFormat( $str ) );
?>

SQL で文字列追加

データベースを扱ったシステムを構築すると

UPDATE `table_name` SET `column` = `column` + 1 WHERE `id` = 1

のように数字を加算(もしくは減算)し更新させることはよくあることですけど、文字列は?

UPDATE `table_name` SET `column` = `column` + "+アイウエオ" WHERE `id` = 1

とやっても当然のごとく意図した通りに動作しません。
どのようにするかと・・・。

UPDATE `table_name` SET `column` = CONCAT( `column` + "+アイウエオ" ) WHERE `id` = 1

できた。(^^)