1

文字列内の同じ針を配列外の異なる値に置き換える方法はありますか?

そのように:

$string = ">>>?<<<>>>?<<<>>>?<<<";  // replacing the three occourances of "?"
                                    // values of array

echo str_multiple_replace($string, array("Hello", "World", "!"));

出力:

">>>Hallo<<<>>>World<<<>>>!<<<"

関数 str_multiple_replace は、3 つの疑問符を配列の内容に置き換えるにはどうすればよいでしょうか。

編集: コンテンツが置換に影響しないようにします。たとえば、「?」がある場合 配列では、置き換えるべきではありません。

4

4 に答える 4

2

preg_replace_callback()を使用します。

$string = ">>>?<<<>>>?<<<>>>?<<<";
$subs   = array('Hello','World','!');
echo preg_replace_callback('#\?#',function ($matches) use (&$subs) {
    return array_shift($subs);
},$string);

または:

$string = ">>>?<<<>>>?<<<>>>?<<<";
$subs   = array('Hello','World','!');

function str_multiple_replace($string, $needle, $subs) {
  return preg_replace_callback('#'.preg_quote($needle,'#').'#',function ($matches) use (&$subs) {
    return array_shift($subs);
  },$string);
}

echo str_multiple_replace($string,'?',$subs);
于 2013-09-12T16:21:33.107 に答える
0

これは例とまったく同じ形式ではありませんが、概念は同じです。

PHP は次のprintf()形式に従って出力を生成します。

$string=">>>%s<<<>>>%s<<<>>>%s<<<";
$length=printf($string,"Hello", "World", "!");
Outputs: >>>Hello<<<>>>World<<<>>>!<<<

http://php.net/manual/en/function.printf.php

于 2013-09-12T16:24:24.720 に答える
0

ブルートフォースソリューションは次のようなものになります....

function str_multiple_replace($haystack, $needle, $replacements)
{
   $out = '';
   while ($haystack && count($needle)) {
      $out .= substr($haystack, 0,1);
      $haystack = substr($haystack, 1);
      if (substr($out, -1*strlen($needle)) === $needle) {
         $out = substr($out, 0, -1*strlen($needle)) . array_shift($replacements);
      }
   }
   $out .= $haystack;
   return $out;
}
于 2013-09-12T16:26:19.807 に答える