Если мы рассмотрим общие сценарии, в которых может быть выбрано это исключение, доступ к свойствам с объектом вверху.
Пример:
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
Сначала получите весь вывод, используя буферизацию вывода. Затем отрегулируйте запятую и отобразите ее. Итак, сделайте это так:
ob_start();
foreach($results as $result)
{
echo $result->name.',';
}
$output = ob_get_clean();
echo rtrim($output, ',');
Метод буферизации вывода помогает, если внутренний цикл очень большой (и OP размещается здесь только для краткости), тогда использование OB проще, без изменения внутренних цикл.
$arraySize = count($results);
for($i=0; $i<$arraySize; $i++)
{
$comma = ($i<$arraySize) ? ", " : "";
echo $results[$i]->name.$comma;
}
Довольно легко с end($array)
здесь:
foreach($results as $result){
echo $result->name . (end($results) ? '' : ',');
}
ссылка здесь.
Еще один умный способ:
foreach($results as $result){
echo ($passed ? ',' : '') . $result->name;
$passed = true;
}
В этом случае в первом цикле $passed
есть NULL
, а ,
не печатается.
Я должен сделать это много, потому что я всегда пытаюсь подавать числа в jplot, я считаю, что проще поставить запятую в переднюю часть цикла так:
foreach($arrayitem as $k){ $string = $string.",".$k;
}
и затем отрубите первый символ (запятую) с помощью substr, это поможет, если вы знаете гостя о продолжительности вашей строки, я не уверен, какой предел для символа substr max.
echo substr($a,1,10000000);
надеюсь, что это поможет.
|
перед $s = '';
foreach ($results as $result) {
if ($s) $s .= '|';
$s .= $result;
}
echo $s;
|
, если не последний элемент $s = '';
$n = count($results);
foreach ($results as $i => $result) {
$s .= $result;
if (($i+1) != $n) $s .= '|';
}
echo $s;
$s = array();
foreach ($results as $result) {
$s[] = $result;
}
echo implode('|', $s);
|
(или rtrim
it) $s = '';
foreach ($results as $result) {
$s .= $result . '|';
}
echo substr($s, 0, -1);
# echo rtrim($s, '|');
array_map()
echo implode('|', array_map(function($result) { return $result; }, $results));
Недавно у меня была такая же проблема с этой аналогичной проблемой. Я исправил его, используя переменную приращения $ 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;
}
}
$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;
Лучше:
$resultstr = array();
foreach ($results as $result) {
$resultstr[] = $result->name;
}
echo implode(",",$resultstr);
$result_names = '';
foreach($results as $result){
$result_names .= $result->name.',';
}
echo rtrim($result_names, ',');
<?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;
?>
Не так красиво, но также работает:
$first=true;
foreach($results as $result){
if(!$first) { echo ', '; }
$first=false;
echo $result->name;
}
$string = "";
while ($row = mysql_fetch_array($result)) {
$string .= $name . ', ';
}
echo substr($string, 0, strlen($string) - 2);