PHPの配列からコンマ区切りリストを作成するにはどうすればよいですか?


113

foreachを使用して配列の項目をループし、コンマを追加する方法を知っていますが、常に最後のコンマを削除するのは面倒です。それを行う簡単なPHPの方法はありますか?

$fruit = array('apple', 'banana', 'pear', 'grape');

最終的に欲しい

$result = "apple, banana, pear, grape"

回答:


231

これには、分解を使用します。

つまり: $commaList = implode(', ', $fruit);


末尾にコンマを付けずにコンマを追加する方法があります。同時に他の操作を行う必要がある場合は、これを行う必要があります。たとえば、各果物を引用し、それらすべてをコンマで区切る場合があります。

$prefix = $fruitList = '';
foreach ($fruits as $fruit)
{
    $fruitList .= $prefix . '"' . $fruit . '"';
    $prefix = ', ';
}

また、各項目の後にカンマを追加する「通常の」方法(以前に行ったように聞こえるように)だけを行い、最後の項目を切り捨てる必要がある場合は、次のようにします$list = rtrim($list, ', ')。多くの人substrがこの状況で不必要にいじくり回しているのを見ます。


4
(引用符を追加しようとする場合)<code> $ fruitlist = '"'。implode( '"、 "'、$ fruit)。 '"'; </ code>
cwallenpoole

文字列にする前に配列内のデータを操作する場合は、foreachループの方が適しています。たとえば、addslashes、またはmysql_real_escape_string。
ナフタリギリアド

39

これは私がそれをやってきた方法です:

$arr = array(1,2,3,4,5,6,7,8,9);

$string = rtrim(implode(',', $arr), ',');

echo $string;

出力:

1,2,3,4,5,6,7,8,9

ライブデモ:http : //ideone.com/EWK1XR

編集: @joseantgvのコメントに従ってrtrim()、上記の例から削除できるはずです。すなわち:

$string = implode(',', $arr);

5
上記で答えたように、implode( '、'、$ arr)
joseantgv

@joseantgvそうですね、なぜ私がを使うのかわかりませんrtrim()。文字列の最後に余分なコンマがあることで問題があったことを思い出しましたが、それが起こっていた状況を思い出せません。
2015

5

and最後の結果:

$titleString = array('apple', 'banana', 'pear', 'grape');
$totalTitles = count($titleString);
if ($totalTitles>1) {
    $titleString = implode(', ', array_slice($titleString, 0, $totalTitles-1)) . ' and ' . end($titleString);
} else {
    $titleString = implode(', ', $titleString);
}

echo $titleString; // apple, banana, pear and grape

3

ロイドの回答に似ていますが、任意のサイズの配列で機能します。

$missing = array();
$missing[] = 'name';
$missing[] = 'zipcode';
$missing[] = 'phone';

if( is_array($missing) && count($missing) > 0 )
        {
            $result = '';
            $total = count($missing) - 1;
            for($i = 0; $i <= $total; $i++)
            { 
              if($i == $total && $total > 0)
                   $result .= "and ";

              $result .= $missing[$i];

              if($i < $total)
                $result .= ", ";
            }

            echo 'You need to provide your '.$result.'.';
            // Echos "You need to provide your name, zipcode, and phone."
        }

3

私は、現在の反復が配列の最後の値でないことを確認するために確認するFORループでIFステートメントを使用することを好みます。そうでない場合は、カンマを追加します

$fruit = array("apple", "banana", "pear", "grape");

for($i = 0; $i < count($fruit); $i++){
    echo "$fruit[$i]";
    if($i < (count($fruit) -1)){
      echo ", ";
    }
}

2
合計数が4とちょうど異なる場合はどうなりますか?
ヨーティッシュ2013

1

場合によっては、特定のインスタンスでこれを行うためにphpが不要なこともあります(たとえば、リストアイテムは、レンダリング時に独自の汎用タグに含まれます)レンダリング後に個別の要素である場合、CSSを介してすべての要素に常にコンマを追加できます。スクリプトから。

私は実際にバックボーンアプリでこれをよく使用して、任意のコード脂肪をトリミングします。

.likers a:not(:last-child):after { content: ","; }

基本的に要素を調べ、最後の要素を除くすべてを対象とし、各項目の後にコンマを追加します。ケースが当てはまる場合にスクリプトをまったく使用する必要がない代替方法です。



0

機能的なソリューションは次のようになります。

$fruit = array('apple', 'banana', 'pear', 'grape');
$sep = ','; 

array_reduce(
    $fruits,
    function($fruitsStr, $fruit) use ($sep) {
        return (('' == $fruitsStr) ? $fruit : $fruitsStr . $sep . $fruit);
    },
    ''
);

0

これに従ってください

$teacher_id = '';

        for ($i = 0; $i < count($data['teacher_id']); $i++) {

            $teacher_id .= $data['teacher_id'][$i].',';

        }
        $teacher_id = rtrim($teacher_id, ',');
        echo $teacher_id; exit;

-1

引用された答えを行う場合、あなたは行うことができます

$commaList = '"'.implode( '" , " ', $fruit). '"';

上記は果物がnullでないことを前提としています。その仮定をしたくない場合は、if-then-elseステートメントまたは三項(?:)演算子を使用できます。


-2

別の方法は次のようになります:

$letters = array("a", "b", "c", "d", "e", "f", "g");

$result = substr(implode(", ", $letters), 0, -3);

の出力$resultは、うまくフォーマットされたコンマ区切りのリストです。

a, b, c, d, e, f, g

-2
$letters = array("a", "b", "c", "d", "e", "f", "g"); // this array can n no. of values
$result = substr(implode(", ", $letters), 0);
echo $result

出力-> a、b、c、d、e、f、g

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.