Php 内爆(101)与引号

内爆一个简单的数组

会是这个样子

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

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

131677 次浏览

不,你这样做很好。implode()只接受1-2个参数(如果只提供一个数组,那么它将通过一个空字符串连接各个部分)。

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

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

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

你可以使用 强 > array_map():

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


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

演示

还要注意,如果要写入文件,那么可以使用 强 > fputcsv

你也可以这样做

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




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

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

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

致:

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

我觉得这就是你想做的

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

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

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

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

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

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

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

这将在字符串周围放置“[’和’]”,这可能是您想要的,也可能是您不想要的。

别忘了逃避你的数据! 如果你想把数据放在一个没有 Fputcsv函数的 CSV 文件中,或者放在一个 SQL 查询中,使用以下代码:

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

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

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

或者

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

另一种解决方案是使用内爆 + preg _ place 实现的,如下所示:

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

正如您所看到的,这也可以避免检查数组是否为空。

试试这个代码:

$data = 'ABC,DEF,GHI';


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




echo $str;