在第5次匹配后用null替换char


replace a char with null after 5-th match

执行以下操作的最佳方法是什么

# 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++;
  }

我相信有更好的方法

必须有一百万种方法可以做到这一点。我快速扫描了内置函数,看看是否有第n次出现的strpos,但没有。

这是一个解决方案。这可能不是最好的,但谁知道呢。

$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)));