使用PHP中的cases / switch替换字符串中的多个项目

时间:2013-10-05 01:16:02

标签: php string switch-statement

我正在尝试做一些事情,我从数据库中取一个长字符串,并替换可能的标签,如[timeYEAR] [timeMONTH] [timeDAY] - 基本上是[]中的任何内容然后基于案例或开关替换项目与其他东西。

与2013年替换[timeYEAR]。

但我不想为每种可能的案例创建一个函数。

有什么想法吗?

提前致谢!

1 个答案:

答案 0 :(得分:1)

如果你想做一些更动态的事情(不区分大小写的匹配,允许time{time_unit}之间有多个空格等),你可以使用preg_replace_callback完成类似的事情。

<?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次调用替换为值的来源。