Массив от pregmatch_all до csv - PullRequest
0 голосов
/ 11 июня 2019

Мне нужно записать все совпадения (кроме тех, которые имеют "DESCATALOGADO" в конце совпадения) из pregmatch_all строки в 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 Ответ

2 голосов
/ 11 июня 2019

Используйте параметр 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);
...