php callback関数

意外と分からないコールバック

例1 preg_replace_callback() と無名関数
<!--?php 
/* Unix 方式のコマンドラインフィルタです。
 * 段落の冒頭の大文字を、小文字に変換します。*/
$fp = fopen("php://stdin", "r") or die("標準入力から読み込めません");
while (!feof($fp)) {
    $line = fgets($fp);
    $line = preg_replace_callback(
        '|</p>
<p>\s*\w|',
        function ($matches) {
            return strtolower($matches[0]);
        },
        $line
    );
    echo $line;
}
fclose($fp);

 

次の例題

例2 preg_replace_callback() の例

<!--?php
// このテキストは 2002 に使われていたものなのですが、 
// これを 2003 年対応の日付に変更したいのです 
$text = "エイプリルフールの日付は 04/01/2002 です\n"; 
$text.= "この前のクリスマスの日付は 12/24/2001 でした\n"; 
// コールバック関数 
function next_year($matches) { 
     // 通常は、$matches[0] がマッチした全体を表します。
     // $matches[1] は、マッチした中で、パターン内の最初の '(...)' 
     // にあてはまる部分を表します。それ以降も同様です。
     return $matches[1].($matches[2]+1); 
} 
echo preg_replace_callback( 
    "|(\d{2}/\d{2}/)(\d{4})|",
          "next_year", 
                 $text);
 ?>
No tags for this post.
タイトルとURLをコピーしました