用带引号的子字符串分解 CSV 字符串以创建平面数组[重复]

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

我有一根绳子

string(22) ""words,one","words2""

并且需要分解为具有结构的数组

array( [0] => words,one ,[1] => words2)
php csv split
4个回答
4
投票

要继续您提到尝试的

explode
选项,您可以尝试以下操作:

$str = '"words,one","words2"';
$arr = explode('","', trim($str, '"'));

print_r($arr);

请注意

trim
删除开始和结束引号,而
explode
使用内部引号作为分隔符的一部分。

输出

Array
(
    [0] => words,one
    [1] => words2
)

1
投票

我认为您的

""
"\"
'"
的拼写错误。
我使用正则表达式来捕获
"
(.*?)
的内部内容,其中
?
意味着懒惰。
我用
"
转义
\"
,使其按字面意思读取。
您的发言将以 $m[1] 为单位。

$str = '"words,one","words2"';

Preg_match_all("/\"(.*?)\"/", $str, $m);

Var_dump($m);

https://3v4l.org/G4m4f

如果这不是拼写错误,您可以使用:

Preg_match_all("/\"+(.*?)\"+/", $str, $m);

这里我给每个

+
添加了一个
"
,意思是“可以有多个”


0
投票

使用 preg_split 你可以尝试:

$str = '"words,one","words2"';
$matches = preg_split("/\",\"/", trim($str, '"'));

print_r($matches);

检查:https://eval.in/945572


0
投票

假设输入字符串可以分解如下:

  • 周围的双引号始终存在,并且每个双引号由一个双引号组成。
  • 删除周围的双引号后留下“words,one”,“words2”。

我们可以提取

fgetcsv
可以解析的 csv 格式的字符串。


修剪原始内容并将其包装在流中允许我们使用

fgetcsv
请参阅 eval.in 上的示例代码

$fullString= '""words,one","words2""';
$innerString = substr($fullString, 1, -1)
$tempFileHandle = fopen("php://memory", 'r+');
fputs($tempFileHandle , $innerString);
rewind($tempFileHandle);
$explodedString = fgetcsv($tempFileHandle, 0, ',', '"'); 
fclose($tempFileHandle);

此方法还支持其他类似格式的字符串:

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.