Не показывать запятую для последнего элемента в цикле foreach [duplicate]

Если мы рассмотрим общие сценарии, в которых может быть выбрано это исключение, доступ к свойствам с объектом вверху.

Пример:

string postalcode=Customer.Address.PostalCode; 
//if customer or address is null , this will through exeption

здесь, если адрес имеет значение null, то вы получите NullReferenceException.

Итак, в качестве практики мы всегда должны использовать проверку нуля, прежде чем обращаться к свойствам в таких объектах (особенно в общих)

string postalcode=Customer?.Address?.PostalCode;
//if customer or address is null , this will return null, without through a exception
18
задан David 18 August 2011 в 20:36
поделиться

12 ответов

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

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

echo rtrim($output, ',');

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

-7
ответ дан shamittomar 28 August 2018 в 03:38
поделиться
$arraySize = count($results);
for($i=0; $i<$arraySize; $i++)
{
  $comma = ($i<$arraySize) ? ", " : "";
  echo $results[$i]->name.$comma;
}
1
ответ дан Adam Ellis 28 August 2018 в 03:38
поделиться

Довольно легко с end($array) здесь:

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

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


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

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

В этом случае в первом цикле $passed есть NULL, а , не печатается.

0
ответ дан Amir Forsati 28 August 2018 в 03:38
поделиться

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

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

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

 echo substr($a,1,10000000);

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

-1
ответ дан Binxalot 28 August 2018 в 03:38
поделиться

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

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

demo

2. Echo |, если не последний элемент

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

demo

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

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

demo

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

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

demo

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

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

demo

18
ответ дан Glavić 28 August 2018 в 03:38
поделиться

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

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

$i=0;
foreach ($results as $result) {
    $i++;
    if(sizeof($results) > $i) {
        echo $result . ", ";
    } else {
        echo $result;
    }
}
0
ответ дан jrgresh92 28 August 2018 в 03:38
поделиться
$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;
-1
ответ дан kapa 28 August 2018 в 03:38
поделиться

Лучше:

$resultstr = array();
foreach ($results as $result) {
  $resultstr[] = $result->name;
}
echo implode(",",$resultstr);
94
ответ дан Kiran Reddy 28 August 2018 в 03:38
поделиться
$result_names = '';
foreach($results as $result){
    $result_names .= $result->name.',';
}
echo rtrim($result_names, ',');
10
ответ дан Mike 28 August 2018 в 03:38
поделиться
<?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;
?>
0
ответ дан Pang 28 August 2018 в 03:38
поделиться

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

$first=true;
foreach($results as $result){
    if(!$first) { echo ', '; }
    $first=false;
    echo $result->name;
}
2
ответ дан Qiu 28 August 2018 в 03:38
поделиться
$string = "";
while ($row = mysql_fetch_array($result)) {
  $string .= $name . ', ';
}
echo substr($string, 0, strlen($string) - 2);
1
ответ дан Sohil Shingala 28 August 2018 в 03:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: