从pregmatch_all到csv的数组

时间:2019-06-11 08:56:19

标签: php arrays regex csv preg-match-all

我需要将字符串的pregmatch_all中的所有匹配项(匹配项末尾带有“ DESCATALOGADO”的匹配项除外)写入CSV。

$pdfText= nl2br($text);

$patternECO = '/^(ECO(?!GEST|DE)(?!GEST|DE)[-\/\w]+(?: [UPMNB]{1,3}(?= ))*) ([^\r\n]+\S)/m' ;
preg_match_all($patternECO, $text, $matches);

$fp = fopen('file.csv', 'w');

foreach ($matches as $match) {
    fputcsv($fp, $match);
}

fclose($fp);

例如,我来自pregmatch_all

Array ( 
    [0] => Array ( 
        [0] => ECO-698 Acondicionador Frio-Calor 
        [1] => ECO-CHI-522 Chimenea eléctrica con patas 
        [2] => ECO-CHI-530 Calefactor purificador 
        [3] => ECO-3005 Halógeno Oscilante 400-800-1200 Watts DESCATALOGADO

我想要这样的csv

ECO-698;Acondicionador Frio-Calor;
ECO-CHI-522;Chimenea eléctrica con patas;
ECO-CHI-530;Calefactor purificador;

1 个答案:

答案 0 :(得分:2)

使用PREG_SET_ORDER选项,以便在同一行结果中将每个匹配项中的所有捕获组合并在一起。

然后在循环中,从行中删除元素0,因为这是整个匹配项,但是您只想将捕获组写入文件。

$patternECO = '/^(ECO(?!GEST|DE)(?!GEST|DE)[-\/\w]+(?: [UPMNB]{1,3}(?= ))*) ([^\r\n]+\S)/m' ;
preg_match_all($patternECO, $text, $matches, PREG_SET_ORDER);

$fp = fopen('file.csv', 'w');

foreach ($matches as $match) {
    array_shift($match);
    fputcsv($fp, $match);
}

fclose($fp);