-1

次のことを行う最良の方法はどれですか?

# if I have the following string :
$str = "Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar";
# and I want to remove "o" character after 5-th match so result I need is :
$newStr = "Foo Bar Foo Bar Fo Bar F Bar F Bar F Bar F Bar...";

私が知っている方法:

  $str = "Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar";
  $str = explode("o", $str);
  $new = "";
  $c = 1;
  foreach($str as $k) {
    if($c>5)
      $new .= $k;
    else 
      $new .= $k."o";
    $c++;
  }

これを行うためのより良い方法があると思います。

4

1 に答える 1

1

これを行う方法は無数にあるはずです。strpos組み込み関数をすばやくスキャンして、n番目に出現するa があるかどうかを確認しましたが、ありませんでした。

これが解決策です。それは最高ではないかもしれませんが、誰が知っていますか.

$str = "Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar";

for (
    $offset = 0, $count = 0;
    $count < 5;
    $offset = strpos($str, 'o', $offset) + 1, $count++
);

$newStr = substr($str, 0, $offset++) .
    str_replace('o', '', substr($str, $offset));

最近、コードゴルフをやりすぎて、狂ったループでごめんなさい!

別の方法を次に示します。

$str = "Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar";

$newStr = implode('o', str_replace('o', '',  explode('o', $str, 6)));
于 2012-08-01T10:00:26.930 に答える