fputcsv,将多个数组放入一行或一列

时间:2017-11-08 17:36:14

标签: output row preg-match-all fputcsv array-unique

我试图找到答案,但我没有成功,请帮忙。

我试图通过preg_match将data.txt中的多行填充到data.csv中的单行或列。它需要是单个数组,因为我只需要唯一的数字。 - >或任何其他选项只获得唯一数字

我无法将数组合并到单个数组,并将其填充为一个数组到单行。任何建议我都会非常高兴。

这是我的简化代码:

$filename = 'data.txt';
$fupids = array ();

$handle = fopen($filename, "r");
if (!$handle) exit;

    while (($line = fgets($handle)) !== false) {
        if (preg_match_all('/([0-9]{8})/',$line,$output)) {
            $fupid = $output[0];
            $file = fopen('data.csv', 'a+');
            fputcsv($file, array_unique($output[0]));           
        }
    }
fclose($file);

这是我简化的data.txt:

10153231,10159512,10159512,10159512
10141703,10160541,10160541
10165815,10158007,10158007

当前的csv输出:

10153231,10159512
10141703,10160541
10165815,10158007

理想的输出只有一行,或者更好的一列,如下所示:

10153231,10159512,10141703,10160541,10165815,10158007

谢谢大家的帮助。

1 个答案:

答案 0 :(得分:0)

也许这样(未经测试):(想法:重复的密钥被array_merge覆盖)

$filename = 'data.txt';
$fupids = [];

if ( false === $hin = fopen($filename, 'r') )
    throw new Exception('unable to open input file');

if ( false === $hout = fopen('data.csv', 'a+') )
    throw new Exception('unable to open output file');

while ( false !== $fields = fgetcsv($hin) ) {
    $fupids = array_merge($fupids, array_flip($fields));
}

fclose($hin);
fwrite($hout, implode(',', array_keys($fupids)));
fclose($hout);