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って気持ち悪い。