PHP使用例外分割字符串

3

我有一个需要拆分的字符串:

3,1,'2015,05,14,11,18,0', 99

我希望您将其分割为。
3
1
'2015,05,14,11,18,0'
99

我该如何使用PHP来实现这个功能?

这是您要找的吗?https://dev59.com/imgu5IYBdhLWcg3wQE8D 您只需要将“替换为'。 - Ittociwam
1
你是尝试过什么还是在等我们写代码呢? - zeflex
我尝试使用explode函数来分割“,”,但由于“2015,05,14,11,18,0”的存在,它无法正常工作。 - Dao Quoc Khanh
1
Hint: Use csv parser - Tuan Anh Hoang-Vu
1个回答

2

其中一个评论者(@tuananh)提到了csv解析器,所以经过一些试验,fgetcsv也可以正常工作,你只需要拥有一个暂存简单字符串的临时文件,在操作完成后删除即可。

将enclosure设置为单引号,这样当解析器分解字符串时,它会将整个用单引号包含的字符串全部获取。

$string = "3,1,'2015,05,14,11,18,0', 99";
file_put_contents('temp.csv', $string); // create temporary file
$fh = fopen('temp.csv', 'r'); // open
$line = fgetcsv($fh, strlen($string) + 1, ',', "'"); // set enclosure to single quotes
fclose($fh);
unlink('temp.csv'); // remove temp file
print_r($line); // Array ( [0] => 3 [1] => 1 [2] => 2015,05,14,11,18,0 [3] => 99 )
// echo implode("\n", $line);

附注: 如果确实是CSV文件,则可以使用整个 fgetcsv

编辑: 如@deceze所说, 关于 字符串使用csv函数

有这样一种东西叫做str_getcsv,因此无需将其实际放入文件中然后取消链接它。

$string = "3,1,'2015,05,14,11,18,0', 99";
$line = str_getcsv($string, ',', "'"); // set enclosure to single quotes
print_r($line);

1
你可以使用内存缓冲区而不是物理文件;或者对字符串使用csv函数。无论哪种方式,这都是不必要的复杂化。 - deceze
@deceze 哈哈 :D 我忘记了 str_getcsv,谢谢你的提醒。 - Kevin

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