php implode(101)with quotes

时间:2011-05-23 20:06:35

标签: php arrays string csv implode

简化一个简单的数组

看起来像这样

$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'

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

15 个答案:

答案 0 :(得分:149)

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


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

答案 1 :(得分:41)

您可以使用array_map()

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

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

DEMO

另请注意,如果要写入文件,则有fputcsv

答案 2 :(得分:26)

不,你这样做的方式很好。 implode()只需要1-2个参数(如果你只提供一个数组,它会用空字符串连接它们。)

答案 3 :(得分:22)

不知道它是否更快,但是,您可以使用您的方法保存一行代码:

发件人

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

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

答案 4 :(得分:20)

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

答案 5 :(得分:8)

如果你想使用循环,你也可以这样做:

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

演示:http://codepad.org/O2kB4fRo

答案 6 :(得分:2)

或者你可以创建这样一个函数:

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

答案 7 :(得分:1)

另一种可能的选择,取决于您需要的数组:

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

这会使' ['和']'在你可能想要或不想要的字符串周围。

答案 8 :(得分:1)

$id = array(2222,3333,4444,5555,6666);
$ids = "'".implode("','",$id)."'";

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

答案 9 :(得分:0)

你也可以这样做

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

答案 10 :(得分:0)

我认为这就是你要做的事情

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

答案 11 :(得分:0)

如果你想避免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";
}

然后你可以根据需要输出字符串。

答案 12 :(得分:0)

别忘了逃脱数据! 如果您想将数据放入没有fputcsv功能的CSV文件中或将其放入SQL查询中,请使用以下代码:

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

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

答案 13 :(得分:0)

如果您需要保留双引号(也许是为了格式化 json?),您还可以:

$array = ["a", "b", "c"];
implode("\",\"", $array) // "a","b","c"

答案 14 :(得分:0)

另一种解决方案是使用 implode + preg_replace 实现的,如下所示:

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

如您所见,这也可以避免检查数组是否为空。