Подтвердить что ты не робот

Удаление последней запятой из цикла foreach

Im, используя цикл foreach, чтобы вывести некоторые значения из моей базы данных, мне нужно удалить последнюю запятую из последнего цикла, если это имеет смысл.

Мой цикл просто, как показано ниже

foreach($results as $result){
  echo $result->name.',';
}

Какой эхо-сигнал

result,result,result,result,

Мне просто нужно убить эту надоедливую последнюю запятую.

Любая помощь будет большой:)

Приветствия

4b9b3361

Ответ 1

Сначала получите весь вывод, используя буферизацию вывода. Затем отрегулируйте запятую и отобразите ее. Итак, сделайте это так:

ob_start();
foreach($results as $result)
{
   echo $result->name.',';
}
$output = ob_get_clean();

echo rtrim($output, ',');

Метод буферизации вывода помогает, если внутренний цикл очень велик (и OP публикуется здесь только для краткости), тогда использование OB проще, не меняя внутренних элементов цикла.

Ответ 2

лучше:

$resultstr = array();
foreach ($results as $result) {
  $resultstr[] = $result->name;
}
echo implode(",",$resultstr);

Ответ 3

1. Согласовать со строкой, но добавить | до

$s = '';
foreach ($results as $result) { 
    if ($s) $s .= '|';
    $s .= $result->name; 
}
echo $s;

2. Эхо | только если не последний элемент

$s = '';
$n = count($results);
foreach ($results as $i => $result) { 
    $s .= $result->name;
    if (($i+1) != $n) $s .= '|';
}
echo $s;

3. Загрузить в массив и затем взорвать

$s = array();
foreach ($results as $result) { 
    $s[] = $result->name;
}
echo implode('|', $s);

4. Конкат к струне, затем вырезать последний | (или rtrim)

$s = '';
foreach ($results as $result) { 
    $s .= $result->name . '|';
}
echo substr($s, 0, -1); # or # echo rtrim($s, '|');

5. Конкретная строка с использованием array_map()

echo implode('|', array_map(function($result) { return $result->name; }, $results));

Ответ 4

$result_names = '';
foreach($results as $result){
    $result_names .= $result->name.',';
}
echo rtrim($result_names, ',');

Ответ 5

У меня недавно была та же проблема с этой проблемой. Я исправил это, используя переменную приращения $ i, инициализировав ее равной 0, а затем увеличивая ее внутри цикла foreach. Внутри этого цикла поместите if, иначе, с оператором echo, включающим запятую, если счетчик $ я меньше, чем оператор sizeof() вашего массива/переменной.

Я не знаю, решит ли это вашу проблему как таковую, но она помогла мне с моей. Я понимаю, что этому вопросу уже много лет, но, надеюсь, это поможет кому-то еще. Я новичок в PHP, поэтому я не совсем понял много ответов, которые были даны до меня, хотя они были довольно проницательными, особенно взрыва.

$i=0;
foreach ($results as $result) {
    $i++;
    if(sizeof($results) > $i) {
        echo $result . ", ";
    } else {
        echo $result;
    }
}

Ответ 6

$arraySize = count($results);
for($i=0; $i<$arraySize; $i++)
{
  $comma = ($i<$arraySize) ? ", " : "";
  echo $results[$i]->name.$comma;
}

Ответ 7

Не так красиво, но также работает:

$first=true;
foreach($results as $result){
    if(!$first) { echo ', '; }
    $first=false;
    echo $result->name;
}

Ответ 8

$string = "";
while ($row = mysql_fetch_array($result)) {
  $string .= $name . ', ';
}
echo substr($string, 0, strlen($string) - 2);

Ответ 9

<?php
$return = array(any array)
$len = count($return);
$str = '';
$i = 1;
foreach($return as $key=>$value)
{
    $str .= '<a href='.$value['cat_url'].'>'.$value['cat_title'].'</a>';
    if($len > $i)
    {
        $str .= ',';
        $i = $i+1;
    }
}
echo $str;
?>

Ответ 10

Довольно просто с end($array) здесь:

foreach($results as $result){
  echo $result->name . (end($results) ? '' : ',');
}

ссылка здесь.


Еще один умный способ:

foreach($results as $result){
  echo ($passed ? ',' : '') . $result->name;
  $passed = true;
}

В этом случае на первый петлевой $passed в NULL и , не печатает.

Ответ 11

<?php
$i = 1;
$count = count( $results );
foreach( $results as $result ) {
    echo $result->name;
    if ( $i < $count ) echo ", ";                               
    ++$i;
}
?>

Ответ 12

Мне нужно сделать это много, потому что я всегда пытаюсь подавать числа в jplot, я нахожу, что его проще поставить запятую перед циклом так:

foreach($arrayitem as $k){ $string =  $string.",".$k;
 } 

а затем отрубите первый символ (запятую) с помощью substr, это поможет, если вы знаете гостя, который будет длинным для вашей строки, я не уверен, какой предел для символа substr max.

 echo substr($a,1,10000000);

надеюсь, что это поможет.

Ответ 13

$a[0] = 'John Doe';       
$a[1] = 'Jason statham';       
$a[2] = 'Thomas Anderson';
$size = count($a);
foreach($a as $key=>$name){
    $result .= $name;
    if($size > $key+1) $result .=', ';
}
echo $result;