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

在PHP中使用cases/switch替换字符串中的多个项,php,string,switch-statement,Php,String,Switch Statement,我试图做一些事情,从数据库中提取一个长字符串,替换可能的标记,如[timeYEAR][timeMONTH][timeDAY]——基本上是[]内的任何标记,然后根据案例或开关将该项替换为其他项 如将[时间年]替换为2013年 但我不想为每种可能的情况创建一个函数 有什么想法吗 提前谢谢 如果您想做一些更动态的事情(不区分大小写的匹配,允许在time和{time\u unit}之间使用多个空格,等等),您可以使用来完成类似的事情 将日期调用替换为值的任何来源。用什么替换标记?该值来自何处?请使用st

我试图做一些事情,从数据库中提取一个长字符串,替换可能的标记,如[timeYEAR][timeMONTH][timeDAY]——基本上是[]内的任何标记,然后根据案例或开关将该项替换为其他项

如将[时间年]替换为2013年

但我不想为每种可能的情况创建一个函数

有什么想法吗


提前谢谢

如果您想做一些更动态的事情(不区分大小写的匹配,允许在
time
{time\u unit}
之间使用多个空格,等等),您可以使用来完成类似的事情


日期
调用替换为值的任何来源。

用什么替换标记?该值来自何处?请使用
str\u replace()
。您可以为它提供原始字符串和替换字符串的数组,它将一次性完成所有操作。谢谢!正是我要找的。我刚刚将时间从“/[time(?P[^]]+]]]/ui”删除为“/[(?P[^]]+]]]]/ui”,因此我可以使用与时间无关的键。你觉得这样行吗?嘿,我还有一个问题。如果我想用标记传递一些数据(变量),该怎么办?[标记名:variableInfo]--这可能吗?当然可以,但您必须使用
preg\u replace\u callback
。然后只需将
$matches['type']
字符串按冒号拆分(':',$matches['type'])并执行您需要执行的操作。这有点简单,但你明白了。您只需要匹配方括号中包含的任何内容,如上所述。在回调函数中执行任何需要的进一步处理。@chrisguitarguy-但是由于变量更改了标记,回调如何检测标记呢。一个可以是[tagName:variable1],另一个可以是[tagName:variable2]
$parts=explode($matches['type'])$标签名称=数组移位($parts)
然后使用剩余的
$部分
<?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]');
<?php
$res = strtr('[timeMONTH] [timeDAY], [timeYEAR]', array(
    '[timeMONTH]'  => date('F'),
    '[timeDAY]'    => date('j'),
    '[timeYEAR]'   => date('Y'),
));