Удаление последнего символа из цикла 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, '|');

Вы не можете сделать это, поскольку код написан потому что:

  1. Вы не знаете, сколько будет итераций и
  2. Вы напрямую повторяете строки (поэтому вы не можете постобработать вывод)

Очень простой способ достичь желаемого результата -

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

Или взорвать решение.

Другие вопросы по тегам