我正在使用 foreach 循环从我的数据库中回显一些值,如果有意义的话,我需要从最后一个循环中删除最后一个逗号。
我的循环很简单,如下
foreach($results as $result){
echo $result->name.',';
}
回声
result,result,result,result,
我只需要杀死那个讨厌的最后一个逗号。
更好:
$resultstr = array();
foreach ($results as $result) {
$resultstr[] = $result->name;
}
echo implode(",",$resultstr);
之前添加
|
$s = '';
foreach ($results as $result) {
if ($s) $s .= '|';
$s .= $result->name;
}
echo $s;
|
仅当不是最后一项$s = '';
$n = count($results);
foreach ($results as $i => $result) {
$s .= $result->name;
if (($i+1) != $n) $s .= '|';
}
echo $s;
$s = array();
foreach ($results as $result) {
$s[] = $result->name;
}
echo implode('|', $s);
|
(或rtrim
它)$s = '';
foreach ($results as $result) {
$s .= $result->name . '|';
}
echo substr($s, 0, -1); # or # echo rtrim($s, '|');
array_map()
echo implode('|', array_map(function($result) { return $result->name; }, $results));
$result_names = '';
foreach($results as $result){
$result_names .= $result->name.',';
}
echo rtrim($result_names, ',');
最近我也遇到了类似的问题。我通过使用增量变量 $i 修复它,将其初始化为 0,然后让它在 foreach 循环内递增。如果 $i 计数器小于数组/变量的 sizeof() 运算符,则在该循环中放置一个 if, else,并在 echo 语句中包含一个逗号。
我不知道这本身是否能解决您的问题,但它对我的问题有所帮助。我意识到这个问题已经有很多年了,但希望这对其他人有帮助。我对 PHP 还很陌生,所以我不太理解在我之前给出的很多答案,尽管它们很有见地,尤其是内爆的答案。
$i=0;
foreach ($results as $result) {
$i++;
if(sizeof($results) > $i) {
echo $result . ", ";
} else {
echo $result;
}
}
在现代 PHP 中,
array_column()
将允许您在对象数组中隔离一列数据。
代码:(演示)
$results = [
(object)['name' => 'A'],
(object)['name' => 'B'],
(object)['name' => 'C']
];
echo implode(',', array_column($results, 'name'));
输出:
A,B,C
就是说,由于您正在迭代一个结果集,那么在您的 sql 中调用一个
CONCAT()
函数可能会更好地为您服务,这样这些值就已经加入了单值结果集中。
如果你在 Laravel 中处理一个集合,你可以
pluck()
和 implode()
:
$collection->pluck('name')->implode(',')
$arraySize = count($results);
for($i=0; $i<$arraySize; $i++)
{
$comma = ($i<$arraySize) ? ", " : "";
echo $results[$i]->name.$comma;
}
不那么漂亮,但也有效:
$first=true;
foreach($results as $result){
if(!$first) { echo ', '; }
$first=false;
echo $result->name;
}
另一个smart方法是:
foreach($results as $result){
echo ($passed ? ',' : '') . $result->name;
$passed = true;
}
在这种情况下,第一个循环
$passed
是 NULL
并且 ,
不打印。
我知道这是一个旧线程,但最近出现了这个问题,我想我会分享我使用 next() 处理它的替代方法,更简洁的方法。
$array = array("A thing", "A whatsit", "eighty flange oscillators");
foreach( $array as $value ){
echo $value;
$nxt = next($array);
if($nxt) echo ", "; // commas between each item in the list
else echo ". And that's it."; // no comma after the last item.
}
// outputs:
// A thing, A whatsit, eighty flange oscillators. And that's it.
我必须经常这样做,因为我总是试图将数字输入到 jplot 中,我发现将逗号放在循环的前面更容易,就像这样:
foreach($arrayitem as $k){ $string = $string.",".$k;
}
然后使用 substr 切掉第一个字符(逗号),如果您知道您的字符串的长度估计会有所帮助,我不确定 substr 最大字符的限制是什么。
echo substr($a,1,10000000);
希望这有帮助。
$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;
<?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;
?>
<?php
$i = 1;
$count = count( $results );
foreach( $results as $result ) {
echo $result->name;
if ( $i < $count ) echo ", ";
++$i;
}
?>
这是我通常做的,在项目之前而不是之后添加一个逗号,同时忽略第一个循环。
$i = 0;
$string = '';
foreach($array as $item){
$string .= ($i++ ? ',' : '').$item;
}
首先使用输出缓冲获取所有输出。然后,修剪逗号并显示它。所以,这样做:
ob_start();
foreach($results as $result)
{
echo $result->name.',';
}
$output = ob_get_clean();
echo rtrim($output, ',');
如果内部循环非常大(并且 OP 在这里发布只是为了简洁起见),则输出缓冲方法会有所帮助,然后在不更改循环内部的情况下使用 OB 会更容易。