0

私はこのコードを持っており、PHP 5.3 以降で正常に動作しますが、5.2.17 以降で実行する必要があります。誰か助けてください。

$data = array('title'=>'some title', 'date'=>1350498600, 'story'=>'Some story');

$template = "#title#, <br>#date(d)#<br> #date(m)#<br>#date(Y)#<br> #story#"; 

$result = preg_replace_callback('/#(\w+)(?:\\((.*?)\\))?#/', function ($match) use($data) {
$value = "";
$dataMatch = $data[$match[1]];
if (!isset($dataMatch)) {
    // undefined variable in template throw exception or something ...
} else {
    $value = $dataMatch;
}

if (! empty($match[2]) && $match[1] == "date") {
    $value = date($match[2], $value);
}

return $value;
}, $template);

echo $result;
4

1 に答える 1

2

最初に置換関数に名前を付け、コールバックの前に定義します$data。preg_replace によって渡されないため、グローバルとして処理することを忘れないでください

function my_replace_function($match){
    global $data;
    $value = "";
    $dataMatch = $data[$match[1]];
    if (!isset($dataMatch)) {
        // undefined variable in template throw exception or something ...
    } else {
        $value = $dataMatch;
    }

    if (! empty($match[2]) && $match[1] == "date") {
        $value = date($match[2], $value);
    }

    return $value;
}

その名前を文字列形式で使用するだけです。

$result = preg_replace_callback('/#(\w+)(?:\\((.*?)\\))?#/','my_replace_function', $template);
于 2012-11-02T08:36:22.247 に答える