24

foreach ループを使用して、データベースからいくつかの値をエコーアウトしています。それが理にかなっている場合は、最後のループから最後のコンマを削除する必要があります。

以下のように、私のループは単純です

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

反響するもの

result,result,result,result,

あの厄介な最後のコンマを殺す必要があるだけです。

4

15 に答える 15

114

より良い:

$resultstr = array();
foreach ($results as $result) {
  $resultstr[] = $result->name;
}
echo implode(",",$resultstr);
于 2011-01-16T14:23:23.537 に答える
14
$result_names = '';
foreach($results as $result){
    $result_names .= $result->name.',';
}
echo rtrim($result_names, ',');
于 2011-01-16T14:17:08.743 に答える
2

最新の PHP では、array_column()オブジェクトの配列内でデータの列を分離できます。

コード: (デモ)

$results = [
    (object)['name' => 'A'],
    (object)['name' => 'B'],
    (object)['name' => 'C']
];

echo implode(',', array_column($results, 'name'));

出力:

A,B,C

とはいえ、結果セットを反復しているCONCAT()ため、値が単一値の結果セットに既に結合されているように、SQL で関数を呼び出したほうがよい場合があります。

于 2020-09-13T02:50:08.020 に答える
0
$arraySize = count($results);
for($i=0; $i<$arraySize; $i++)
{
  $comma = ($i<$arraySize) ? ", " : "";
  echo $results[$i]->name.$comma;
}
于 2012-05-29T03:05:16.470 に答える
0

それほどきれいではありませんが、機能します:

$first=true;
foreach($results as $result){
    if(!$first) { echo ', '; }
    $first=false;
    echo $result->name;
}
于 2015-08-18T19:01:54.930 に答える
0

これが古いスレッドであることは知っていますが、これは最近出てきたので、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.

ここでそれで遊ぶ

于 2021-02-15T16:57:10.543 に答える
0

別のスマートな方法は次のとおりです。

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

この場合、最初のループ$passedは印刷され、印刷NULLされ,ません。

于 2018-02-24T16:30:58.463 に答える
-1

私は常に jplot に数値をフィードしようとしているので、これを何度も行う必要があります。次のように、ループの前にコンマを配置する方が簡単です。

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

次に、substr を使用して最初の文字 (コンマ) を切り落とします。文字列が長い場合に役立ちます。substr の最大文字数の制限が何であるかはわかりません。

 echo substr($a,1,10000000);

お役に立てれば。

于 2012-05-13T15:44:30.383 に答える
-1
$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;
于 2012-09-27T11:06:06.823 に答える
-1

これは私が通常行うことであり、最初のループを無視して、項目の後ではなく前にカンマを追加します。

$i = 0;
$string = '';

foreach($array as $item){
    $string .= ($i++ ? ',' : '').$item;
}
于 2020-08-26T11:19:25.493 に答える
-1
<?php
$i = 1;
$count = count( $results );
foreach( $results as $result ) {
    echo $result->name;
    if ( $i < $count ) echo ", ";                               
    ++$i;
}
?>
于 2018-10-05T10:38:40.363 に答える
-12

まず、出力バッファリングを使用してすべての出力を取得します。次に、コンマをトリミングして表示します。したがって、次のようにします。

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

echo rtrim($output, ',');

内部ループが非常に大きい場合 (OP は簡潔にするためにここに投稿している場合)、出力バッファリング メソッドが役立ちます。その場合、ループの内部を変更せずに OB を使用する方が簡単です。

于 2011-01-16T14:21:53.223 に答える