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'

有没有更好的方法来做到这一点,我觉得应该有一个可选参数 implode 我错过了什么吗?

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

我认为这就是你想要做的

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

你也可以这样做

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

不要忘记转义您的数据! 如果要将数据放入不带fputcsv函数的 CSV 文件中或将其放入 SQL 查询中,请使用以下代码:

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

当输入数组包含单引号反斜杠字符时,此代码可避免 SQL 注入或数据碎片。

于 2020-12-01T13:37:56.727 回答
0

另一种可能的选择,取决于您需要阵列的用途:

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

这会将 '[' 和 ']' 放在字符串周围,您可能想要也可能不想要。

于 2018-06-12T12:55:21.043 回答
0

试试这个代码:

$data = 'ABC,DEF,GHI';

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


echo $str;
于 2021-10-01T10:16:50.920 回答