Удаление последнего символа из цикла foreach
Как удалить последний канал из списка генерируемых чисел?
$days = new DatePeriod(new DateTime, new DateInterval('P1D'), 6);
foreach ($days as $day) {
echo strtoupper($day->format('d')+543);
echo "|";
}
6 ответов
Решение
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, '|');
Вы не можете сделать это, поскольку код написан потому что:
- Вы не знаете, сколько будет итераций и
- Вы напрямую повторяете строки (поэтому вы не можете постобработать вывод)
Очень простой способ достичь желаемого результата -
echo implode('|', array_map(function($d) { return $d->format('d')+543; },
iterator_to_array($days)));
Это работает путем преобразования итерации $days
в массив, форматирование результатов с array_map
и склеив их вместе со стандартным implode
,
Собрать вывод в цикле и добавить |
до, а не после.
$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 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
Или взорвать решение.