我想替换一个字符,并希望将该字符放在php中的下一个字符之后。 例如:
<?php
$exa = array("R" => "r", "A" => "a", "V" => "v", "I" => "i");
echo strtr("RAVI", $exa);
?> //displays "ravi" ok
我想用“v”代替“V”,然后想把它放在“我”之后。 像这样:“raiv”
答案 0 :(得分:2)
我认为这个解决方案可能让您感兴趣:
<强>功能强>
function replaceAndMove($text, $replacements) {
$from = array_keys($replacements);
$to = array_values($replacements);
function fixFrom($s) {
return '/' . preg_quote($s, '/') . '(.|$)' . '/';
}
function fixTo($s) {
return '${1}' . $s;
}
$from_ready = array_map('fixFrom', $from);
$to_ready = array_map('fixTo', $to);
return preg_replace($from_ready, $to_ready, $text);
}
测试用例
$text = "abcdXefghXijklX----aFb~~~cMd";
$replacements = array(
'X' => 'x',
'F' => 'f',
'M' => 'm',
);
echo $text . '<br>';
echo replaceAndMove($text, $replacements);
<强>输出强>
abcdXefghXijklX----aFb~~~cMd
abcdexfghixjkl-x---abf~~~cdm
编辑:修复了正则表达式特殊字符的问题,例如。或者]
答案 1 :(得分:1)
首先执行str_replace,然后使用strlen,substr和字符串的索引来替换最后2个点,如果这是你想要做的。因为如果字符串是&#34;测试&#34;
,你可以像数组一样访问字符串每个字符$ t [1] == e如果你有一些&#34;设置&#34;您可以这样做的模式:
$find = array('RAVI',...,so on);
$replace = array('raiv',..., so on);
$input = 'RAVI';
echo str_replace($find, $replace, $input);
只需在阵列中添加更多设置对即可获得更多替换...如果您想要的话。
答案 2 :(得分:0)
你在寻找这样的东西:
<?php
$string = "RAVIVL";
$replace_char = "v";
$string = strtolower($string);
$pos = array_keys(array_intersect(str_split($string),array($replace_char)));
foreach ($pos as $p) {
if (isset($string[$p+1])) {
$string[$p] = $string[$p+1];
$string[$p+1] = $replace_char;
}
}
echo $string;
?>
使用以下字母交换所有出现的“v”。