foreach ループを使用して、データベースからいくつかの値をエコーアウトしています。それが理にかなっている場合は、最後のループから最後のコンマを削除する必要があります。
以下のように、私のループは単純です
foreach($results as $result){
echo $result->name.',';
}
反響するもの
result,result,result,result,
あの厄介な最後のコンマを殺す必要があるだけです。
foreach ループを使用して、データベースからいくつかの値をエコーアウトしています。それが理にかなっている場合は、最後のループから最後のコンマを削除する必要があります。
以下のように、私のループは単純です
foreach($results as $result){
echo $result->name.',';
}
反響するもの
result,result,result,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 では、array_column()
オブジェクトの配列内でデータの列を分離できます。
コード: (デモ)
$results = [
(object)['name' => 'A'],
(object)['name' => 'B'],
(object)['name' => 'C']
];
echo implode(',', array_column($results, 'name'));
出力:
A,B,C
とはいえ、結果セットを反復しているCONCAT()
ため、値が単一値の結果セットに既に結合されているように、SQL で関数を呼び出したほうがよい場合があります。
$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;
}
これが古いスレッドであることは知っていますが、これは最近出てきたので、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.
別のスマートな方法は次のとおりです。
foreach($results as $result){
echo ($passed ? ',' : '') . $result->name;
$passed = true;
}
この場合、最初のループ$passed
は印刷され、印刷NULL
され,
ません。
私は常に 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;
これは私が通常行うことであり、最初のループを無視して、項目の後ではなく前にカンマを追加します。
$i = 0;
$string = '';
foreach($array as $item){
$string .= ($i++ ? ',' : '').$item;
}
<?php
$i = 1;
$count = count( $results );
foreach( $results as $result ) {
echo $result->name;
if ( $i < $count ) echo ", ";
++$i;
}
?>
まず、出力バッファリングを使用してすべての出力を取得します。次に、コンマをトリミングして表示します。したがって、次のようにします。
ob_start();
foreach($results as $result)
{
echo $result->name.',';
}
$output = ob_get_clean();
echo rtrim($output, ',');
内部ループが非常に大きい場合 (OP は簡潔にするためにここに投稿している場合)、出力バッファリング メソッドが役立ちます。その場合、ループの内部を変更せずに OB を使用する方が簡単です。