我想删除'';dellimiter介于“";在php中


I want to remove the ',' dellimiter between " " in php

我只想删除"之间的","dellimiter。Exmp:"Alibris: Books, Music, & Movies"

第一行的输出应为

256,2653,"Alibris: Books  Music  & Movies",50263394,05/14/2013,07:44,50263394,114.85,1,5.74,05/14/2013,08:10

这里的阵列示例

Array
(
    [0] => 256,2653,"Alibris: Books, Music, & Movies",50263394,05/14/2013,07:44,50263394,114.85,1,5.74,05/14/2013,08:10,
    [1] => 256,2653,"Alibris: Books, Music, & Movies",50327805,05/21/2013,23:03,50327805,-6.99,1,-0.35,05/22/2013,07:10,
    [2] => 256,2653,"Alibris: Books, Music, & Movies",50327805,05/21/2013,23:03,50327805,6.99,1,0.35,05/22/2013,00:10,
    [3] => 527,36777,BuySKU,920130525042340263061,05/24/2013,20:25,1390043,"1,170.73",11,58.54,05/24/2013,20:55,
)

以下是我建议您采取的方法:

  • 对于文件中的每一行
    • 使用PHP的CSV函数将行读取到数组中(http://php.net/manual/en/function.fgetcsv.php)
    • 可以使用str_replace修改要修改的数组元素
    • 以CSV格式写出数组(http://www.php.net/manual/en/function.fputcsv.php)

关键是,您需要将字符串分解为其组成部分,而不是试图修改某些逗号,而不是其他逗号。

你可以这样做

,(?!([^"]*"[^"]*"[^"]*)+$|[^"]*$)

将其替换为空字符串

只有当前面有奇数个"时,这才会匹配。因此,如果它在" 之间,它将匹配,

演示

所以,这将是

$pattern = "/,(?!([^'"]*'"[^'"]*'"[^'"]*)+$|[^'"]*$)/"; 
$replace = ""; 
$line = preg_replace($pattern,$replace,$line); 

如果你想把它和,分开,只在"外面使用

 ,(?=([^"]*"[^"]*"[^"]*)+$|[^"]*$)

所以它将是

preg_split('/,(?=([^'"]*'"[^'"]*'"[^'"]*)+$|[^'"]*$)/', $text);

您可以在闭包中使用str_getcsv和str_replace来完成此

$rec = str_getcsv($line);
$rec = array_map(
     function($x){
          return str_replace(",", "", $x); 
     },$rec);

现在,您可以使用一个数组来调用fputcsv

如果您绝对需要将值作为字符串,则可以使用此处实现的str_putcsv实现。

请注意,此语法(内联闭包以及str_getcsv函数)仅适用于php5.3+