PHP:如何按逗号拆分字符串,但不包括在引号内的逗号?

24
我需要将输入的字符串按逗号分隔成数组。但是该字符串包含在引号内的逗号。
输入:
$line = 'TRUE','59','A large number is 10,000';

$linearray = explode(",",$line);
$linemysql = implode("','",$linearray);
返回 $linemysql 为:
'TRUE','59','A large number is 10','000'

如何实现这一点,让explode函数忽略引号内的逗号?


1
看一下fgetcsv,它应该能够实现你想要的功能。 - Zachary K
1
我想问一下你想实现什么,因为我认为有更好的方法可以替代使用explode。 - amitchd
1
$line = 'TRUE','59','A large number is 10,000'; 不是一个字符串 ;) - Felix Kling
1
在整个计划中,我试图从CSV文件中获取数据并将其转储到MySQL数据库中。但是,某些数组部分中包含逗号的文本,我不想将其分开。 - Nicekiwi
2个回答

69
由于您使用逗号分隔的值,您可以使用str_getcsv函数。
str_getcsv($line, ",", "'");

将会返回:

Array
(
    [0] => TRUE
    [1] => 59
    [2] => A large number is 10,000
)

有没有一种方法可以保留那些单引号。 - Raghuram Vadapalli
添加注释,第三个参数是替换值,我只是将其留空“”。 - ericjam

6
似乎您不想通过逗号拆分字符串,而是想通过引号+逗号+引号的连续来拆分?
如果是这样,preg_split函数可能会有所帮助。
例如,可以使用以下代码段:
$line = "'TRUE','59','A large number is 10,000'";
$parts = preg_split("/','/", $line);
var_dump($parts);

我得到以下输出:
array
  0 => string ''TRUE' (length=5)
  1 => string '59' (length=2)
  2 => string 'A large number is 10,000'' (length=25)

从这里开始,现在需要先去掉$line字符串的第一个和最后一个引号,再调用preg_split--因为它们是分隔符,不匹配分割模式。


虽然你和其他人提出的方法都可以解决问题,但我发现自己犯了一个小错误。$line变量的数据没有加引号。你有什么想法来解决这个问题吗? - Nicekiwi
不合法答案,首个片段以单引号开头,最后一个片段以单引号结尾,类似于 explode("','", $line); - Aniket Singh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接