2013-08-02 355 views
0

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

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

我想更换 “V” 与 “V”,然后希望把它 “I” 之后。 是这样的:“raiv”

+0

请问这有什么实际用途? – MightyPork

+0

它的字体转换器。 –

+0

这并没有真正解释目的。有什么搞乱字符串来处理字体? – MightyPork

回答

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 

编辑:修复了正则表达式,特殊字符等。或]

+0

是的,这是我想要的。 –

+0

@Ravikant当我回答时,这并不安全。它现在(编辑) - 甚至应该处理在正则表达式中有特殊含义的字符。 – MightyPork

+0

该死的又一个bug。我希望这个新的编辑效果很好。如果不是,我会尽力帮助。 – MightyPork

1

首先做str_replace,然后用strlen,substr和字符串的索引替换最后2个点,如果这是你正在做的事情。因为你可以访问一个字符串像一个阵列中的每个字符$ T [1] == e如果字符串是“测试”

如果你有几个“设置”模式,你可能只是这样做:

$find = array('RAVI',...,so on); 
$replace = array('raiv',..., so on); 

$input = 'RAVI'; 

echo str_replace($find, $replace, $input); 

只需将更多组对添加到阵列中即可获得更多替换...如果这就是您想要的。

+0

请举例:) –

+0

不,不是。他显然想要做其他的字符串,而不仅仅是这个例子。 – MightyPork

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”用下面这封信。

+0

$ string =“RAVIVP”;显示“raivvp”而不是“raivpv” –