0

我有以下结构:

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

它附加了循环迭代$string的次数,而我只希望它在循环结束时foreach显示一次。如果在循环之外工作。我怎样才能输出一次并删除其余部分。我需要在循环内而不是在循环外进行。The number is 4preg_replaceecho

4

2 回答 2

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。如果不是,请考虑简化事情。

于 2012-06-28T11:57:18.570 回答
0

我认为您需要的解决方案是输出缓冲

// 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;
于 2012-06-28T12:04:00.247 回答