0

データベースから長い文字列を取得し、[timeYEAR] [timeMONTH] [timeDAY] などの可能なタグを置き換える何かをしようとしています - 基本的に [] 内のすべてのもので、ケースまたはスイッチに基づいてその項目を何かに置き換えますそうしないと。

[timeYEAR] を 2013 に置き換えます。

しかし、考えられるケースごとに関数を作成したくありません。

何か案は?

前もって感謝します!

4

1 に答える 1

1

preg_replace_callbackより動的なことをしたい場合は、このようなことを達成できます (大文字と小文字を区別しない一致、timeと の間に複数のスペースを許可する{time_unit}など)。

<?php
$res = preg_replace_callback('/\[time(?P<type>[^\]]+)\]/ui', function ($matches) {
    switch (trim(strtolower($matches['type']))) {
        case 'year':
            return date('Y');
            break;
        case 'month':
            return date('F');
            break;
        case 'day':
            return date('j');
            break;
        default:
            return $matches[0];
            break;
    }
}, '[timemonth] [timeday], [timeyear] [timenope]');

よりダイナミックにする必要がない場合strtrは、おそらく少し速いでしょう。

<?php
$res = strtr('[timeMONTH] [timeDAY], [timeYEAR]', array(
    '[timeMONTH]'  => date('F'),
    '[timeDAY]'    => date('j'),
    '[timeYEAR]'   => date('Y'),
));

date値のソースがたまたま何であれ、呼び出しを置き換えます。

于 2013-10-05T01:50:45.083 に答える