我有以下结构:
<?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 4
。如果在循环之外,preg_replace
可以正常工作。我如何echo
输出一次并删除其余部分。我需要在循环中完成它,而不是在它之外。
答案 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;