0

char を置き換えて、その文字を php の次の char の直後に置きたい。例えば:

<?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、および文字列のインデックスを使用して、最後の 2 つのスポットを置き換えようとしている場合。文字列ごとに配列のような文字列にアクセスできるので、文字列が「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;
?>

すべてのオカレンス o "v" を次の文字と交換します。

于 2013-08-02T22:58:54.160 に答える