替换字符并与字符串中的下一个交换。

时间:2013-08-02 22:40:33

标签: php

我想替换一个字符,并希望将该字符放在php中的下一个字符之后。 例如:

<?php
$exa = array("R" => "r", "A" => "a", "V" => "v", "I" => "i");
echo strtr("RAVI", $exa);
?> //displays "ravi" ok

我想用“v”代替“V”,然后想把它放在“我”之后。 像这样:“raiv”

3 个答案:

答案 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”。