preg_replace_callbackとpreg_match_allで文字列置換
初めて使ったんでメモ。
PHPでこんなことが出来るとのこと。
private function _applaySsiInclude($htmlText) { preg_match_all($this->_getIncludePattern(), $htmlText, $includes); $values = $includes[1]; $callback = array($this, '_replaceSsiInclude'); foreach ($values as $value) { $pattern = $this->_getIncludePattern($value); $htmlText = preg_replace_callback($pattern, $callback, $htmlText); } return $htmlText; } private function _replaceSsiInclude($matches) { //「value=」でもらってきた値に応じて置換内容変えたり、とか…そういう感じの処理 //実際やったことはメソッドの引数にした、みたいな感じ。 $str = ""; if($matches[1] === 'なんとか') { $str = '何か'; } else { $str = 'なんだろ…'; } return $str; } private function _getIncludePattern($value = '[_-\\w]*') { return "/<!--\\s*#include\\s+virtual=\"\/sample\.php\?value=({$value})\\s*\"\s*-->/"; }
概要はhtmlの文字列にある「」の部分をphpで書き換えろ!みたいな感じ。
なんでそんなことしてるのかとかそうスルーして…
preg_replace_callbackとpreg_match_allを使ったらステップ数が減った。
最初はforeachでまわして〜とか色々やってコレ+15ステップ位あった。
そしてこっちの方がコードすっきり。
なにより(・∀・)イイ!!と思ったのが正規表現で「()」でくくると、も「()」でくくったトコを個別に配列にして渡してくれるところ。
これに助けられた。
でも相変わらずPHPって気持ち悪い。