人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHP5.5で文字列の途中を抜くにはどのような関数を使いますか?
以下のように変数に文字列が入っており、$a?$bの部分だけ切り取り$xのようにしたいのです。
いくつか条件があります。
1. $aの文字列が$vに見つからなかったら先頭から、$bの文字列が$vに見つからなかったら最後までとします。
2. $aや$bの文字列が$vにいくつか見つかった場合には、最初に見つかった文字からとし、$bも最初に見つかった文字までとします。
3. $aの文字列が$bより後に見つかった場合、$xは空白とします。
よろしくお願いします。

$v = "あいうえおかきくけこさしすせそ";
$a = "え";
$b = "すせ";

$x = "おかきくけこさし";

●質問者: wsapp
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● a-kuma3
●100ポイント ベストアンサー

正規表現でいけそうな気もしなくはないんですが、素直に文字列関数を組み合わせてみました。

<?php
 function cut_s($v, $a, $b) {
 $i = strpos($v, $a);
 if (! $i) {
 $i = 0;
 } else {
 $i = $i + strlen($a);
 }
 $j = strpos($v, $b);
 if (! $j) {
 $j = strlen($v);
 }
 return $i < $j ? substr($v, $i, $j - $i) : '';
 }
?>

以下のテストコードを実行した結果が、

<?php
 /* 切り出す */
 $v = "あいうえおかきくけこさしすせそ";
 $a = "";
 $b = "すせ";
 echo "|" . cut_s($v, $a, $b) . "|\n";

 /* 開始が見つからない */
 $a = "";
 $b = "すせ";
 echo "|" . cut_s($v, $a, $b) . "|\n";

 /* 終了が見つからない */
 $a = "";
 $b = "";
 echo "|" . cut_s($v, $a, $b) . "|\n";

 /* 開始と終了の位置が逆転 */
 $a = "こさ";
 $b = "うえ";
 echo "|" . cut_s($v, $a, $b) . "|\n";

 /* 開始も終了も見つからない */
 $a = "んぺ";
 $b = "んぺ";
 echo "|" . cut_s($v, $a, $b) . "|\n";

 /* 開始が複数見つかる */
 $v = "あいうえおかきくえけこさしえすせそ";
 $a = "";
 $b = "すせ";
 echo "|" . cut_s($v, $a, $b) . "|\n";

 /* 終了が複数見つかる */
 $a = "";
 $b = "";
 echo "|" . cut_s($v, $a, $b) . "|\n";
?>

こんな感じになります。

|おかきくけこさし|
|あいうえおかきくけこさし|
|おかきくけこさしすせそ|
||
|あいうえおかきくけこさしすせそ|
|おかきくえけこさしえ|
|う|


Ideone.com と言うサイトで、動作の確認をしたのがこちらです。
http://ideone.com/PBjstZ



最後に、使った文字列関数のマニュアルのリンクを。


wsappさんのコメント
ご回答ありがとうございます。 パーフェクトです。 開始文字数などでコントロールするなど考え付きもしませんでした。 勉強になりました。 ありがとうございます m(_ _)m
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ