PHP内爆(101)与报价

Imploding一个简单的数组

看起来像这样

$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."'"; 

现在我有我想要一个漂亮的csvstring

  'lastname','email','phone' 

有没有更好的方式来做到这一点,这对我感觉像应该有一个可选参数为implode我错过了什么?

不,你这样做的方式就好了。 implode()只需要1-2个参数(如果你只是提供一个数组,它会通过一个空string连接这些数据块)。

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

你可以使用array_map()

 function add_quotes($str) { return sprintf("'%s'", $str); } $csv = implode(',', array_map('add_quotes', $array)); 

DEMO

另外请注意,如果你想写入一个文件有fputcsv

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

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

至:

 $array = array('lastname', 'email', 'phone'); $comma_separated = "'".implode("','", $array)."'"; 
 $ids = sprintf("'%s'", implode("','", $ids ) ); 

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

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

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

或者你可以创build这样一个function:

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

你也可以这样做

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

我认为这就是你想要做的

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

如果你想避免fopen / fputcsv子系统这里是一个片段,从关联数组中构build一个转义的CSVstring….

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

或从对象列表中…

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

然后你可以根据需要输出string。