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?

mcgrailm.dll
sumber
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).

Rafe Kettler
sumber
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) . "'";
Umesh Moghariya
sumber
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
sumber
@ 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 ) );
Robb
sumber
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)."'";
Drew Dello Stritto
sumber
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

Naftali alias Neal
sumber
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));
}

sumber
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.

doublejosh
sumber
0

Anda juga bisa melakukannya dengan cara ini

<?php
$csv= '\'' . join(array('lastname', 'email', 'phone'),'\',').'\'';
echo $csv;
?>
Senad Meškin
sumber
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)) . "'";
rack_nilesh
sumber
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.

Jeremy Prancis
sumber