Bagaimana cara membuat daftar yang dipisahkan koma dari array di PHP?

113

Saya tahu cara mengulang item dari sebuah array menggunakan foreach dan menambahkan koma, tapi selalu merepotkan harus melepas koma terakhir. Apakah ada cara PHP yang mudah untuk melakukannya?

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

Akhirnya saya mau

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

Jawaban:

231

Anda ingin menggunakan implode untuk ini.

yaitu: $commaList = implode(', ', $fruit);


Ada cara untuk menambahkan koma tanpa menambahkan koma. Anda ingin melakukan ini jika Anda harus melakukan manipulasi lain pada saat yang bersamaan. Misalnya, mungkin Anda ingin mengutip setiap buah lalu memisahkan semuanya dengan koma:

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

Juga, jika Anda hanya melakukannya dengan cara "normal" untuk menambahkan koma setelah setiap item (seperti kedengarannya Anda lakukan sebelumnya), dan Anda perlu memangkas yang terakhir, lakukan saja $list = rtrim($list, ', '). Saya melihat banyak orang yang tidak perlu menyia-nyiakan substrsituasi ini.

ryeguy
sumber
4
Akan lebih masuk akal (jika mencoba menambahkan tanda kutip) untuk memanggil <code> $ fruitlist = '"'. Implode ('", "', $ fruit). '"'; </code>
cwallenpoole
Perulangan foreach lebih baik jika Anda ingin memanipulasi data tersebut dalam larik sebelum membuatnya menjadi string; Misalnya, menambahkan garis miring, atau mysql_real_escape_string.
Naphtali Gilead
39

Beginilah cara saya melakukannya:

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

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

echo $string;

Keluaran:

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

Demo Langsung: http://ideone.com/EWK1XR

EDIT: Sesuai komentar @ joseantgv, Anda harus dapat menghapus rtrim()dari contoh di atas. Yaitu:

$string = implode(',', $arr);
Nate
sumber
5
Seperti yang dijawab di atas, Anda bisa melakukan implode (',', $ arr)
joseantgv
@joseantgv Anda benar, saya tidak tahu mengapa saya menggunakan rtrim(). Saya ingat pernah mengalami masalah dengan adanya koma tambahan di ujung string, tetapi tidak dapat mengingat situasi di mana hal itu terjadi.
Nate
6

Hasil andakhirnya:

$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
Waqar Alamgir
sumber
3

Mirip dengan jawaban Lloyd, tetapi berfungsi dengan berbagai ukuran array.

$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."
        }
ceasetodream
sumber
3

Saya lebih suka menggunakan pernyataan IF di loop FOR yang memeriksa untuk memastikan iterasi saat ini bukan nilai terakhir dalam array. Jika tidak, tambahkan koma

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

for($i = 0; $i < count($fruit); $i++){
    echo "$fruit[$i]";
    if($i < (count($fruit) -1)){
      echo ", ";
    }
}
Lloyd Banks
sumber
2
jika jumlah total hanya berbeda dari 4?
Jyothish
1

Kadang-kadang Anda bahkan tidak memerlukan php untuk ini dalam kasus tertentu (Cantumkan item masing-masing dalam tag generik mereka sendiri pada render misalnya) Anda selalu dapat menambahkan koma ke semua elemen kecuali last-child melalui css jika mereka adalah elemen terpisah setelah dirender dari naskah.

Saya sering menggunakan ini di aplikasi backbone sebenarnya untuk memangkas beberapa lemak kode arbitrer:

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

Pada dasarnya melihat elemen, menargetkan semua kecuali elemen terakhirnya, dan setelah setiap item menambahkan koma. Hanya cara alternatif untuk tidak harus menggunakan skrip sama sekali jika kasusnya berlaku.

Lux.Capacitor
sumber
1
$fruit = array('apple', 'banana', 'pear', 'grape');    
$commasaprated = implode(',' , $fruit);
Vijay Prajapati
sumber
0

Solusi fungsional akan berjalan seperti ini:

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

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

Ikuti yang ini

$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;
Ariful Islam
sumber
-1

Jika melakukan jawaban yang dikutip, Anda bisa melakukannya

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

di atas mengasumsikan bahwa buah tidak nihil. Jika Anda tidak ingin membuat asumsi itu, Anda dapat menggunakan pernyataan if-then-else atau terner (? :).

vogomatix.dll
sumber
-2

Cara lain bisa seperti ini:

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

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

Keluaran dari $resultadalah daftar yang dipisahkan koma dengan format yang bagus.

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

keluaran-> a, b, c, d, e, f, g

Sanjay Arora
sumber