我试图找到答案,但我没有成功,请帮忙。
我试图通过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
谢谢大家的帮助。
答案 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);