電子書籍の厳選無料作品が豊富!

PHPで、ある文字列に特定の記号があった場合、explodeで分割して、最終的に記号が取り除かれた配列を作成したいのですが、再帰などを用いていたら頭がこんがらがってしまいうまく作ることができませんでした…

試行錯誤の残骸を残すので、アドバイスいただけないでしょうか。

例)「north : we.st:e-a-s-t:south」
→以下の要素を持つ配列にしたい
north
we
st
e
a
s
t
south

★以下、試行錯誤した残骸です・・・

$data = array("north : we.st:e-a-s-t:south'");
$kigou = array("-","=","',"'",":",";",",",".");
$last_result = doDivide($kigou, $data);

function doDivide($kigou,$array_words){

//分割配列分ループ
foreach($array_words as $word){

//トリム
$word = trim($word);

//記号分ループ
foreach($kigou as $k){

//単語が記号にマッチするか調べる
$match_result = preg_match("/" . $k . "/", $word);
if ($match_result !== 0) {

//マッチした記号で配列に分割する
$divided_array = explode($k, $word);

//配列に空白があったら削除する
$divided_array = array_diff($divided_array, array( "" ));

//再帰的に呼び出す
$result[] = doDivide($kigou, $divided_array);
}
}
}
//分割されきった単語を返す
return $result;
}

A 回答 (1件)

これでどうでしょうか。



$data = array("north : we.st:e-a-s-t:south'");
$kigou = array("-","=",'"',"'",":",";",",","."," ");

$last_result = preg_split("/\\".implode("|\\",$kigou)."/",
implode(" ",$data), NULL, PREG_SPLIT_NO_EMPTY);
    • good
    • 0
この回答へのお礼

たった1行で書ける内容だったんですね・・・勉強になります。
試したところ期待通りの結果になりました。どうもありがとうございます!

お礼日時:2012/03/18 13:59

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!