php implode (101) dengan tanda kutip


115

Menerapkan array sederhana

akan terlihat seperti ini

$array = array('lastname', 'email', 'phone');
$comma_separated = implode(",", $array);

dan itu akan mengembalikan ini

 lastname,email,phone

bagus, jadi saya mungkin melakukan ini sebagai gantinya

$array = array('lastname', 'email', 'phone');
$comma_separated = implode("','", $array);
$comma_separated = "'".$comma_separated."'";

dan sekarang saya memiliki apa yang saya inginkan string csv cantik yang bagus

 'lastname','email','phone'

apakah ada cara yang lebih baik untuk melakukan ini, menurut saya harus ada parameter opsional untuk implode apakah saya kehilangan sesuatu?


11
Saya melihat banyak komentar tentang jawaban yang diberikan menjadi "lebih lambat". Tidak masalah . Pilih cara yang lebih jelas dan lebih mudah dirawat, khawatirkan kinerja nanti, jika ada.
meagar

1
Satu-satunya kelemahan adalah itu akan menghasilkan satu string kosong jika lariknya kosong. yaitu. setara dengan$comma_separated = "''";
scipilot

1
Solusi hebat mcgrailm ... sangat menghargainya
Sandeep Garg

1
terima kasih @mcgrailm, ini berfungsi untuk proyek saya. sangat menghargai ini.
Wafie Ali

Jawaban:


29

Tidak, caramu melakukannya baik-baik saja. implode()hanya membutuhkan 1-2 parameter (jika Anda hanya menyediakan sebuah array, itu menggabungkan potongan-potongan dengan string kosong).


tampaknya tidak ada perbedaan kecepatan dalam solusi ini. Saya akan terus melakukannya seperti yang selalu saya lakukan, terima kasih atas bantuan semua orang
mcgrailm

163
$array = array('lastname', 'email', 'phone');


echo "'" . implode("','", $array) . "'";

sesederhana mungkin
Jeffz

ini melakukan pekerjaan untuk saya
mikey

5
Hati-hati dengan larik kosong saat menggunakan solusi ini.
Luigi

Terima kasih. Saya menggunakan ini untuk<ul> <li> {!! implode('</li><li>', session('messages')) !!} </li> </ul>
marlo

42

Anda bisa menggunakan array_map():

function add_quotes($str) {
    return sprintf("'%s'", $str);
}

$csv =  implode(',', array_map('add_quotes', $array));

DEMO

Perhatikan juga bahwa ada fputcsvjika Anda ingin menulis ke file.


@ Felix Kling Saya menduga ini akan menjadi lebih lambat juga?
mcgrailm

1
@mcgrailm, saya bertanya lagi: lebih lambat dari apa?
Naftali aka Neal

2
@mcgrailm: Mungkin, saya sarankan Anda membuat tolok ukur dan mencari tahu;)
Felix Kling

@Felix Kling bagaimana cara melakukannya?
mcgrailm

1
Ini memiliki manfaat tambahan yang memungkinkan Anda untuk keluar dari tanda kutip tunggal yang mungkin muncul dalam elemen array
meagar

29
$ids = sprintf("'%s'", implode("','", $ids ) );

Luar biasa, sederhana, dan langsung.
Vinícius

23

Tidak tahu apakah ini lebih cepat, tetapi, Anda dapat menyimpan sebaris kode dengan metode Anda:

Dari

$array = array('lastname', 'email', 'phone');
$comma_separated = implode("','", $array);
$comma_separated = "'".$comma_separated."'";

Untuk:

$array = array('lastname', 'email', 'phone');
$comma_separated = "'".implode("','", $array)."'";

dan saya bisa melanjutkannya tetapi meletakkan definisi array di mana variabel $ array ada di baris terakhir tetapi saya perbedaan kecepatan akan sangat terbatas
mcgrailm

8

Jika Anda ingin menggunakan loop, Anda juga dapat melakukan:

$array = array('lastname', 'email', 'phone');
foreach($array as &$value){
   $value = "'$value'";
}
$comma_separated = implode(",", $array);

Demo: http://codepad.org/O2kB4fRo


1
@mcgrailm, lebih lambat dari apa? Ini pada dasarnya sama dengan array_maptetapi tanpa menggunakanarray_map
Naftali alias Neal

lebih lambat dari cara saya membuat string csv saat ini
mcgrailm

@mcgrailm lihat komentar @ FelixKling
Naftali alias Neal

1
+1 tampaknya satu-satunya jawaban yang benar - semua jawaban lainnya akan menghasilkan string kosong saat mencoba meledakkan array kosong. Yang ini tidak akan.
Denis Matafonov

Terima kasih @DenisMatafonov :-)
Naftali alias Neal

2

Atau Anda dapat membuat fungsi seperti itu:

function implode_with_quotes(array $data)
{
    return sprintf("'%s'", implode("', '", $data));
}

1

Jika Anda ingin menghindari sub-sistem fopen / fputcsv, berikut adalah cuplikan yang membuat string CSV yang lolos dari array asosiatif ....

$output = '';
foreach ($list as $row) {
  $output .= '"' . implode('", "', array_values($row)) . '"' . "\r\n";
}

Atau dari daftar objek ...

foreach ($list as $obj) {
  $output .= '"' . implode('", "', array_values((array) $obj)) . '"' . "\r\n";
}

Kemudian Anda dapat mengeluarkan string sesuai keinginan.


0

Anda juga bisa melakukannya dengan cara ini

<?php
$csv= '\'' . join(array('lastname', 'email', 'phone'),'\',').'\'';
echo $csv;
?>

2
join hanyalah sebuah alias dari implode
mcgrailm

0

Saya pikir inilah yang Anda coba lakukan

$array = array('lastname', 'email', 'phone');
echo "'" . implode("','", explode(',', $array)) . "'";

0

Opsi lain yang memungkinkan, tergantung pada apa Anda membutuhkan array untuk:

$array = array('lastname', 'email', 'phone');
echo json_encode($array);

Ini akan menempatkan '[' dan ']' di sekitar string, yang mungkin Anda inginkan atau tidak inginkan.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.