如何从生成的数字列表中去除最后一个管道?
$days = new DatePeriod(new DateTime, new DateInterval('P1D'), 6);
foreach ($days as $day) {
echo strtoupper($day->format('d')+543);
echo "|";
}
1.连接到字符串,但在之前添加|
$s = '';
foreach ($days as $day) {
if ($s) $s .= '|';
$s .= strtoupper($day->format('d')+543);
}
echo $s;
2.仅在不是最后一项时才回显|
$n = iterator_count($days);
foreach ($days as $i => $day) {
echo strtoupper($day->format('d')+543);
if (($i+1) != $n) echo '|';
}
3. 加载到阵列,然后内爆
$s = array();
foreach ($days as $day) {
$s[] = strtoupper($day->format('d')+543);
}
echo implode('|', $s);
4. 连接到字符串,然后切下最后一|
(或rtrim
它)
$s = '';
foreach ($days as $day) {
$s .= strtoupper($day->format('d')+543) . '|';
}
echo substr($s, 0, -1);
# echo rtrim($s, '|');
在
循环中收集输出,并在之前而不是之后添加|
。
$days = new DatePeriod(new DateTime, new DateInterval('P1D'), 6);
$echo = '';
foreach ($days as $day) {
if ($echo!='') $echo.='|';
$echo.=strtoupper($day->format('d')+543);
}
echo $echo;
570|571|572|573|544|545|546
由于编写代码,因此无法执行此操作,因为:
- 你不知道会有多少次迭代和
- 您直接回显字符串(因此无法对输出进行后处理)
实现所需结果的一个非常简单的方法是
echo implode('|', array_map(function($d) { return $d->format('d')+543; },
iterator_to_array($days)));
这是通过将$days
的迭代转换为数组,用array_map
格式化结果并用标准implode
将它们粘合在一起来工作的。
剪切最后一个字符:
echo substr($str,0,-1);
例
$days = new DatePeriod(new DateTime, new DateInterval('P1D'), 6);
foreach ($days as $day) {
$str .= strtoupper($day->format('d')+543);
$str .= "|";
}
echo substr($str,0,-1);
尝试喜欢
$cnt = count($days);
$i = 0;
foreach ($days as $day) {
echo strtoupper($day->format('d')+543);
if($i++ < $cnt)
echo "|";
}
可以使用输出缓冲来控制回显的内容。
http://md1.php.net/manual/en/function.ob-start.php
或者内爆解决方案。