Если вы не упростили пример кода:
echo implode(',', $list);
делает это (см. Также implode
Руководство по PHP ).
Если в цикле foreach
имеется больше кода, вам необходимо отслеживать, находится ли последний элемент или нет, и разбираться с ситуацией:
$count = count($list);
$current = 0;
foreach ($list as $item)
{
$current++;
$notLast = $current !== $count;
echo $item;
if ($notLast) echo ',';
}
Редактировать: Вы добавили аналогичный код в вопрос после того, как я ответил на него, поэтому, если это слишком обременительно для ваших пальцев кодирования и особенно (и понятно), вы не хотите повторять такой код в течение всего днято же самое, вам нужно заключить его в капсулу для повторного использования.Одним из решений является реализация этого в многократно используемом итераторе:
$list = array('a', 'b', 'c');
class PositionKnowingIterator implements iterator
{
/**
* @var iterator
*/
private $inner;
private $count;
private $index;
public function __construct(array $list) {
// NOTE: implement more iterators / objects to deal with in here
// if you like. This constructor limits it to arrays but
// more is possible.
$this->count = count($list);
$this->inner = new ArrayIterator($list);
}
/* SPL iterator implementation */
public function current() {
return $this->inner->current();
}
public function next() {
$this->index++;
$this->inner->next();
}
public function key() {
$this->inner->key();
}
public function rewind() {
$this->index = 1;
$this->inner->rewind();
}
public function valid() {
return $this->inner->valid();
}
/* Position Knowing */
public function isLast() {
return $this->index === $this->count;
}
public function notLast() {
return !$this->isLast();
}
public function isFirst() {
return $this->index === 1;
}
public function notFirst() {
return !$this->isFirst();
}
public function isInside() {
return $this->notFirst() && $this->notLast();
}
}
foreach($iterator = new PositionKnowingIterator($list) as $item)
{
echo "'".$item."'", $iterator->notLast() ? ',' : '';
}