php 带引号内爆

问题描述 投票:0回答:16

爆炸一个简单的数组

看起来像这样

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

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

php arrays string csv implode
16个回答
208
投票
$array = array('lastname', 'email', 'phone');


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

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

48
投票

您可以使用

array_map()

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

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

演示

另请注意,如果您想写入文件,则有

fputcsv


30
投票

不,你这样做的方式就很好。

implode()
仅需要 1-2 个参数(如果您只提供一个数组,它将通过一个空字符串连接各个部分)。


24
投票

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

来自

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

致:

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

10
投票

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

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

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


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

或者

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

2
投票

您也可以创建这样一个函数:

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

2
投票

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

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

如您所见,这也使您无需检查数组是否为空。


2
投票

尝试这个代码:

$data = 'ABC,DEF,GHI';

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


echo $str;

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";
}

然后就可以输出想要的字符串了。


1
投票

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

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

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


1
投票

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

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

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


0
投票

你也可以这样做

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

0
投票

我认为这就是你正在尝试做的事情

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

0
投票

我知道这是一个旧的,但我刚刚创建了这个片段

public static function quoted_implode($array = null, $sep = ','){
        $keys = null;
        if(null !== $array && is_array($array)){
            $keys = implode('"'. $sep .'"',$array);
            $keys =  '"'.$keys .'"';
        }
        return $keys;
}

我将其编写为方法,但很容易转换为普通函数。

如何使用(这只是我正在研究的另一种方法的一行)?

$js_output .= " ".'input_ids:['.self::quoted_implode($options['input_ids']).'],'.PHP_EOL;

结果为:(js) input_ids:["test_number","test_input1","test_input2"],

可能对某人有帮助吗?

© www.soinside.com 2019 - 2024. All rights reserved.