3

如何从生成的数字列表中删除最后一个管道?

$days = new DatePeriod(new DateTime, new DateInterval('P1D'), 6); 
foreach ($days as $day) { 
    echo strtoupper($day->format('d')+543); 
    echo "|";
}
4

6 回答 6

5

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, '|');
于 2013-09-27T12:26:21.317 回答
3

在循环中收集输出,并在|之前而不是之后添加。

$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
于 2013-09-27T12:27:25.700 回答
3

在编写代码时,您不能这样做,因为:

  1. 你不知道会有多少次迭代
  2. 您直接回显字符串(因此您无法对输出进行后处理)

实现您想要的结果的一种非常简单的方法是

echo implode('|', array_map(function($d) { return $d->format('d')+543; },
                            iterator_to_array($days)));

这通过将迭代$days转换为数组,array_map使用标准格式化结果并将它们粘合在一起来工作implode

于 2013-09-27T12:28:33.487 回答
0

剪切最后一个字符:

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);
于 2013-09-27T12:26:21.780 回答
0

试试喜欢

$cnt = count($days);
$i = 0;
foreach ($days as $day) { 
    echo strtoupper($day->format('d')+543); 
        if($i++ < $cnt)
            echo "|";
 }
于 2013-09-27T12:26:37.963 回答
-1

您可以使用输出缓冲来控制回显的内容。

http://md1.php.net/manual/en/function.ob-start.php

或内爆解决方案。

于 2013-09-27T12:27:23.530 回答