php preg_replace在foreach循环中不起作用

时间:2012-06-28 11:40:35

标签: php foreach preg-replace

我有以下结构:

<?php
  $i = 0;
  foreach ($users as $user) {
    $i++;
    $string = '<span>The number is $i</span>';
    $string = preg_replace('/\<span.*?\/>$/e','',$string);
    echo $string;
  }
?>

它追加$stringforeach循环迭代的次数,而我只是希望它在循环结束时显示一次The number is 4。如果在循环之外,preg_replace可以正常工作。我如何echo输出一次并删除其余部分。我需要在循环中完成它,而不是在它之外。

2 个答案:

答案 0 :(得分:0)

这样做:

$i = 0;
foreach ($users as $user) {
   $i++;
   if ($i == count($users)) {
      $string = '<span>The number is $i</span>';
      $string = preg_replace('/\<span.*?\/>$/e','',$string);
      echo $string;
   }
}

尽管如此,您可能还需要考虑实现此目的的其他选项。您可以保留$i变量并在循环后立即输出,因为这正是它的确切。

或者,你可以echo "<span>The number is ".count($users)."</span>";。 在我的回答中,我认为你完全无法改变这些事情,而且你的问题比这个简单的preg_replace更复杂。如果不是,请考虑简化。

答案 1 :(得分:0)

我认为您需要的解决方案是output buffering

// Start the output buffer to catch the output from the loop
ob_start();

$i = 0;
foreach ($users as $user) {
  $i++;
  // Do stuff
}

// Stop the output buffer and get the loop output as a string
$loopOutput = ob_get_clean();

// Output everything in the correct order
echo '<span>The number is '.$i.'</span>'.$loopOutput;