【问题标题】:PHP: How can I explode a string by commas, but not wheres the commas are within quotes?PHP:如何用逗号分解字符串,但不能用引号括起来?
【发布时间】:2011-07-05 04:32:06
【问题描述】:

我需要将我的字符串输入分解为逗号处的数组。但是该字符串在引号内包含逗号。

输入:

$line = 'TRUE','59','A large number is 10,000';

$linearray = explode(",",$line);
$linemysql = implode("','",$linearray);

返回 $linemysql 为:

'TRUE','59','A large number is 10','000'

我怎样才能做到这一点,爆炸忽略引号内的逗号?

【问题讨论】:

  • 看看fgetcsv这应该可以满足您的需求。
  • 你想达到什么目的,我在问,因为我认为有更好的方法来做到这一点,而不是使用爆炸。
  • $line = 'TRUE','59','A large number is 10,000'; 不是字符串 ;)
  • 在宏伟的计划中,我试图从 CSV 文件中获取数据并将其转储到 MySQL 数据库中。但是,在我不想分隔的某些数组部分中有包含逗号的文本。

标签: php string explode


【解决方案1】:

由于您使用的是逗号分隔值,因此您可以使用str_getcsv

str_getcsv($line, ",", "'");

将返回:

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

【讨论】:

  • 有没有办法保留那些单引号。
  • 补充注意第三个参数是替换值,我只是留空""。
【解决方案2】:

看来你不想用逗号分割你的字符串,而是用引号+逗号+引号的连续?

如果是这样,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)

从这个开始,现在需要在调用 preg_split 之前删除 $line 字符串的第一个和最后一个引号 - 因为它们是分隔符,并且不匹配拆分模式。

【讨论】:

  • 尽管您和其他人的建议可行,但我意识到我会犯一个小错误。 $line 变量的数据周围没有引号。知道我现在将如何解决这个问题吗?
  • 无效答案,第一段在开始时包含单引号,在结尾处包含最后一段。同explode("','", $line);
猜你喜欢
  • 1970-01-01
  • 2013-02-20
  • 2017-04-07
  • 1970-01-01
  • 2018-08-22
  • 1970-01-01
  • 2016-01-12
  • 2021-06-12
  • 1970-01-01
相关资源
最近更新 更多