0

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

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

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

4

3 回答 3

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

编辑:修复了正则表达式特殊字符的问题,例如 . 或者 ]

于 2013-08-02T23:01:51.003 回答
1

首先执行 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);

只需将更多的集合对添加到数组中以进行更多替换......如果这就是你想要的。

于 2013-08-02T22:48:32.707 回答
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”。

于 2013-08-02T22:58:54.160 回答