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。