我想替换一个字符并想将该字符放在 php 中的下一个字符之后。例如:
<?php
$exa = array("R" => "r", "A" => "a", "V" => "v", "I" => "i");
echo strtr("RAVI", $exa);
?> //displays "ravi" ok
我想用“v”替换“V”,然后想把它放在“I”之后。像这样:“raiv”
我想替换一个字符并想将该字符放在 php 中的下一个字符之后。例如:
<?php
$exa = array("R" => "r", "A" => "a", "V" => "v", "I" => "i");
echo strtr("RAVI", $exa);
?> //displays "ravi" ok
我想用“v”替换“V”,然后想把它放在“I”之后。像这样:“raiv”
我认为这个解决方案可能会让您感兴趣:
功能
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
编辑:修复了正则表达式特殊字符的问题,例如 . 或者 ]
首先执行 str_replace,然后使用 strlen、substr 和字符串的索引来替换最后两个点(如果您要这样做的话)。因为如果字符串是“test”,您可以访问像数组一样的字符串,每个字符 $t[1] == e
如果您有一些“设置”模式,您可以这样做:
$find = array('RAVI',...,so on);
$replace = array('raiv',..., so on);
$input = 'RAVI';
echo str_replace($find, $replace, $input);
只需将更多的集合对添加到数组中以进行更多替换......如果这就是你想要的。
您是否正在寻找这样的东西:
<?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”。