Php 使用数组时,preg_replace应该是迭代的吗?可能是个虫子
我有一个字符串,表示一周中的某一天“U”、“M”、“T”等。我试图使用preg_replace将字母替换为实际的日期名称,如星期日、星期一等 然而,它似乎是在以迭代的方式应用替换数组,而这并不是Php 使用数组时,preg_replace应该是迭代的吗?可能是个虫子,php,regex,preg-replace,Php,Regex,Preg Replace,我有一个字符串,表示一周中的某一天“U”、“M”、“T”等。我试图使用preg_replace将字母替换为实际的日期名称,如星期日、星期一等 然而,它似乎是在以迭代的方式应用替换数组,而这并不是 $input = "U"; $nice_day_name = preg_replace(['/U/','/M/','/T/','/W/','/R/','/F/','/S/'], ['Sun','Mon','Tue','Wed','Thu','Fri','Sat'], $input); //
$input = "U";
$nice_day_name = preg_replace(['/U/','/M/','/T/','/W/','/R/','/F/','/S/'],
['Sun','Mon','Tue','Wed','Thu','Fri','Sat'],
$input);
// Outputs "Satun", should be "Sun"
似乎模棱两可。下面是关于这个主题的内容:
如果模式
和替换
参数都是数组,则每个模式
都将被对应的替换
替换
看起来您将此理解为“将针对数组中的每个模式检查原始字符串,并进行替换”。我可以看到人们是如何以这种方式读取它的。它似乎是在根据字符串检查每个模式,包括已进行的任何替换
所以它是这样做的:
/U/
,找到匹配项,进行替换-->Sun
/S/
,找到匹配项(第一个字符),进行替换-->Satun
['/^U$/','/^M$/','/^T$/','/^W$/','/^R$/','/^F$/','/^S$/']
仅当字符串长度为一个字符时,这将导致匹配。此任务最好使用以下方法完成:
不要让问题变得更难:
$day_names = array_combine(
['U','M','T','W','R','F','S'],
['Sun','Mon','Tue','Wed','Thu','Fri','Sat']
);
$nice_day_name = $day_names[$input];
有同样的问题,我用另一个问题来回答
试试这个:
$string = 'U';
$trans = array("U" => "Sun", "M" => "Mon", "T" => "Tue", "W" => "Wed", "R" => "Thu",
"F" => "Fri", "S" => "Sat");
$result = strtr($string,$trans);
echo $result;
为什么您需要
preg\u replace()
来执行此操作?您只是在搜索已知字符串,所以str\u replace()
应该可以正常工作。或者,如果您总是使用单字符输入,为什么不指定一个关联数组来映射替换?一个明显的解决方法是,通过更改/T(?ue | hu)的/T/
来防止替换已替换的文本部分/
,例如。至于处理顺序-好吧,在不产生潜在冲突的情况下,您还希望得到什么?如果主题是数组,则对subject@MikeBrant:不,.@raina77ow负面表情的开头一点也不明显:p“Quote”比“Code”更适合使用“用于引用文件;”为你编辑的。嗯-把降价再提高一点-在那里!。。。这太有效了XD我没有注意到输入仅仅是一个字符+1请注意:这是Niet提出的。哦,是的,事实上,当我开始打字时,它不可用,然后我测试并发布它,这花了一点时间。。
$string = 'U';
$trans = array("U" => "Sun", "M" => "Mon", "T" => "Tue", "W" => "Wed", "R" => "Thu",
"F" => "Fri", "S" => "Sat");
$result = strtr($string,$trans);
echo $result;