137

単純な配列の内破

このようになります

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

そしてそれはこれを返すでしょう

 lastname,email,phone

素晴らしいので、代わりにこれを行うかもしれません

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

そして今、私は素敵なかわいいcsv文字列が欲しいものを持っています

 'lastname','email','phone'

これを行うためのより良い方法はありますか、それは私が何かを逃している内破のためのオプションのパラメータがあるべきであるように私には感じますか?

4

15 に答える 15

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


echo "'" . implode("','", $array) . "'";
于 2012-04-06T13:25:34.280 に答える
44

あなたが使用することができますarray_map()

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

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

デモ

またfputcsv、ファイルに書き込みたい場合もありますのでご注意ください。

于 2011-05-23T20:12:46.157 に答える
43
$ids = sprintf("'%s'", implode("','", $ids ) );
于 2016-12-12T19:26:20.553 に答える
29

いいえ、あなたがそれをしている方法はちょうどいいです。implode()1〜2個のパラメーターのみを取ります(配列を指定するだけの場合は、空の文字列で断片を結合します)。

于 2011-05-23T20:10:00.697 に答える
23

それが速いかどうかはわかりませんが、メソッドを使用してコード行を保存することができます。

から

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

に:

$array = array('lastname', 'email', 'phone');
$comma_separated = "'".implode("','", $array)."'";
于 2013-02-01T04:36:10.480 に答える
10

ループを使用する場合は、次のこともできます。

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

デモ:http ://codepad.org/O2kB4fRo

于 2011-05-23T20:12:34.470 に答える
5
$id = array(2222,3333,4444,5555,6666);
$ids = "'".implode("','",$id)."'";

または

$ids = sprintf("'%s'", implode("','", $id ) );
于 2020-12-06T05:37:17.490 に答える
2

または、次のような関数を作成できます。

function implode_with_quotes(array $data)
{
    return sprintf("'%s'", implode("', '", $data));
}
于 2016-08-23T06:29:37.340 に答える
1

fopen / fputcsvサブシステムを避けたい場合は、連想配列からエスケープされたCSV文字列を作成するスニペットを次に示します。

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

またはオブジェクトのリストから...

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

その後、必要に応じて文字列を出力できます。

于 2016-06-27T23:59:57.960 に答える
1

別の解決策は、次のようにimplode+preg_replaceを使用して実現されます。

$a = ['A', 'B', 'C'];
implode(',', preg_replace('/^(.*)$/', '"$1"', $a)); // "A","B","C"
$b = [];
implode(',', preg_replace('/^(.*)$/', '"$1"', $b)); // empty string

ご覧のとおり、これにより、配列が空かどうかを確認する必要もなくなります。

于 2021-05-29T04:12:25.667 に答える
0

あなたもこのようにそれを行うことができます

<?php
$csv= '\'' . join(array('lastname', 'email', 'phone'),'\',').'\'';
echo $csv;
?>
于 2011-05-23T20:16:59.243 に答える
0

これがあなたがやろうとしていることだと思います

$array = array('lastname', 'email', 'phone');
echo "'" . implode("','", explode(',', $array)) . "'";
于 2014-09-03T13:33:02.753 に答える
0

アレイが必要な目的に応じて、別の可能なオプション:

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

これにより、文字列の周りに「[」と「]」が配置されます。これは、必要な場合と不要な場合があります。

于 2018-06-12T12:55:21.043 に答える
0

データをエスケープすることを忘れないでください!fputcsv関数 を使用せずにCSVファイルにデータを入れたい場合、またはSQLクエリに入れたい場合は、次のコードを使用します。

$comma_separated = "'" . implode("','", array_map('addslashes', $array)) . "'";

このコードは、入力配列に一重引用符または円記号が含まれている場合に、SQLインジェクションまたはデータの断片化を回避します。

于 2020-12-01T13:37:56.727 に答える
0

このコードを試してください:

$data = 'ABC,DEF,GHI';

$str = "'".str_replace(',',"','",$data)."'";


echo $str;
于 2021-10-01T10:16:50.920 に答える