今回は、こんな実装をしました。
日本料理◯◯/東京
中華料理の◯◯◯/神奈川県
↓
日本料理〇〇
中華料理の◯◯◯
だけ切り抜く。
ただし、条件があります。
店名に/(全角スラッシュ)がつく可能性も考慮して、半角/(半角スラッシュ)で前後を切り出すように。
今回の事例は、あまり需要がないかもしれまんせが、せっかく作ったので備忘録的に残しておきます。
目次
流れ
1.文字の中から半角スラッシュを探す
2.半角スラッシュの位置を取得する
3.前後を切り出す
半角スラッシュより後ろを切り出す
<?php
$sample = "中華料理のテスト/東京都";
///(スラッシュ)の有無確認。この段階では全角と半角は区別していない。
if(strpos($sample,'/') !== false){
///(スラッシュ)より後を取得する
$arr = str_split($sample);//文字を一文字ずつ配列に格納
$cnt = count($arr);//配列の要素数を取得
$arrno = 0;
while($arrno <= $cnt){
// 実行する処理
$arrno++;
$count_arr = $sample[$arrno];
if (mb_strlen($count_arr) == mb_strwidth($count_arr) && $count_arr == "/") {
$slash_position = $arrno; //スラッシュの位置を変数化します
$result = substr( $sample, $slash_position+1 );//都道府県名の抜き出し
print $result;//出力:東京都
break;//while文を強制終了する。
}
}
}
?>
半角スラッシュより前を切り出す
半角スラッシュより前を切り出す場合は、19行目の
substr( $sample,0, $slash_position);
に第二引数0を指定するだけです。
第二引数は、どこから切り出すかを指定しています。
よって、
substr( 切り出す文字列,どこから, どこまで);
という指定がされていることが分かります。
<?php
$sample = "中華料理のテスト/東京都";
///(スラッシュ)の有無確認。この段階では全角と半角は区別していない。
if(strpos($sample,'/') !== false){
///(スラッシュ)より前を取得する
$arr = str_split($sample);//文字を一文字ずつ配列に格納
$cnt = count($arr);//配列の要素数を取得
$arrno = 0;
while($arrno <= $cnt){
// 実行する処理
$arrno++;
$count_arr = $sample[$arrno];
if (mb_strlen($count_arr) == mb_strwidth($count_arr) && $count_arr == "/") {
$slash_position = $arrno; //スラッシュの位置を変数化します
$prefectures_slash = substr( $sample,0, $slash_position);//店舗名の抜き出し
print $prefectures_slash;//出力:中華料理のテスト
break;//while文を強制終了する
}
}
}
?>
解説
5行目では、文字列内にスラッシュが含まれているか判別します。
if(strpos($sample,'/') !== false){
strpos関数は、文字列の最初にスラッシュが含まれた場合、0を返します。スラッシュが見つからなかった場合はfalseを返します。
整数の「0」はIF判定で「否定」と捉えられ、PHPでは整数「0」はboolean変換において、falseに変換されるため、
IF文で使用する場合は、上記のように指定することが必要になります。
8行目では、文字列を一文字ずつ配列に格納します。
このあとに、while文で一文字ずつ検査をしていき、全角・半角スラッシュ判定・半角スラッシュの位置を把握をするためです。
$arr = str_split($sample);//文字を一文字ずつ配列に格納
16行目で、全角スラッシュ・半角スラッシュを判別しています。
シングルバイト扱いでの長さとマルチバイト扱いでの長さが同じなら半角というイメージです。
mb_strlen($count_arr) == mb_strwidth($count_arr)
最後に、substrで切り出しをしています。
$result = substr( $sample, $slash_position+1 );//スラッシュより後ろを切り出し
$prefectures_slash = substr( $sample,0, $slash_position);//スラッシュより前を切り出し
まとめ
複雑に見えるものも、丁寧に順番を追って処理を進めていけば、実装出来ることが分かりました。
これで、たとえば、
「中華料理の///岐阜県」
とあっても、半角スラッシュを判別して、切り出してくれます。
(ほんとうにこういう店舗名があるのかはさておきw)
結果:中華料理の//
結果:岐阜県
参考にしていただければ幸いです!
IT業界、盛り上げていきましょう。