2013-08-02 253 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」 –