【发布时间】:2016-01-31 17:16:35
【问题描述】:
我有两个 CSV:
第一个 csv 是这样的:
number | color | size | animal
**1234** | black | big | cat
第二个 csv 是这样的:
name | country | os | number | flavour | yesorno
john | world | windows | **1234** | good | yes
我要做的是根据匹配的数值合并两个 CSV(标题和每行的值):
number | color | size | animal | name | country | os | flavour | yesorno
**1234** | black | big | cat | john | world | windows | good | yes
我一直在尝试使用fgetcsv 并使用密钥,但我真的是 php 的新手,我不知道该怎么做。我需要理解其中的逻辑。有人可以帮忙吗?
非常感谢。
-- 编辑以便更好地理解-- 基于stackoverflow上的另一个问题,我尝试了以下代码,但效果不佳。两个 CSV 文件中的两个标头未合并。它也丢失了 csv 中的所有数据,它只合并了一行数据。
在另一个问题中找到了代码:Merging two csv files together using php,这似乎是我想要实现的目标的完美基础。不幸的是,输出的 csv 格式不正确...
<?php
// 1st section
$fh = fopen('csv1.csv', 'r');
$fhg = fopen('csv2.csv', 'r');
while (($data = fgetcsv($fh, 0, ";")) !== FALSE) {
$csv1[] = $data;
}
while (($data = fgetcsv($fhg, 0, ",")) !== FALSE) {
$csv2[] = $data;
}
// 2nd section
for ($x = 0; $x < count($csv2data); $x++) {
if ($x == 0) {
unset($csv1data[0][17]);
$line[$x] = array_merge($csv2data[0], $csv1data[17]); //header
} else {
$deadlook = 0;
for ($y = 0; $y <= count($csv1data); $y++) {
if($csv1data[$y][17] == $csv2data[$x][0]){
unset($csv1data[$y][17]);
$line[$x]=array_merge($csv2data[$x],$csv1data[$y]);
$deadlook=1;
}
}
if ($deadlook == 0)
$line[$x] = $csv2data[$x];
}
}
// 3 section
$fp = fopen('final.csv', 'w'); //output file set here
foreach ($line as $fields) {
fputcsv($fp, $fields);
}
fclose($fp);
?>
【问题讨论】:
-
你是如何尝试使用
fgetcsv的?请表现出一些努力 -
@Trix:我已经编辑了我的问题。