我想连接两个CSV文件:
url.csv:
www.text.com/test.html
www.text.com/test1.html
www.text.com/test2.html
color.csv:
红色
黑色
粉红色
结果应该是:www.text.com/test.html?color=Red
www.text.com/test1.html?color=Red
www.text.com/test2.html?color=Red
www.text.com/test.html?color=Black
www.text.com/test1.html?color=Black
www.text.com/test2.html?color=Black
我的最终代码:
$url_csv = "cache_build_urls_file.csv";
$url_csv_resource = fopen($url_csv,"r");
$color_csv = "colors_file.csv";
$color_csv_resource = fopen($color_csv,"r");
$new_color = "color_cache_build_urls_file.csv";
$outputBuffer = fopen($new_color, 'w');
$result = $urls = $colors = array();
if (($handle = fopen($url_csv, "r")) !== FALSE) {
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
$urls[] = $data[0];
}
fclose($handle);
}
if (($handle = fopen($color_csv, "r")) !== FALSE) {
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
$colors[] = $data[0];
}
fclose($handle);
}
foreach( $urls as $url ) {
foreach( $colors as $color ) {
$result[] = $url.'?color='.$color;
}
}
foreach($result as $val) {
$arr[0] = $val;
fputcsv($outputBuffer,$arr);
}
fclose($outputBuffer);
答案 0 :(得分:0)
我不会向你解释一切,只是一些简单的基础知识。您正在寻找的是嵌套循环。基本上你开始阅读你的第一个CSV文件,并且对于你得到的每个结果,你都会读到第二个文件。
如果CSV文件中存在大量数据集,我可以推荐“缓存”。结果首先进入数组。这将加速最终代码。这是一个简单的例子:
$result = $urls = $colors = array();
if (($handle = fopen("source1.csv", "r")) !== FALSE) {
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
$urls[] = $data[0];
}
fclose($handle);
}
我创建了2个数组,一个用于URL,一个用于颜色。然后我读取CSV文件并填充数组。第二个来源也是如此。只要弄清楚自己在那里做了什么。
然后您将创建一个结合两个数组的嵌套循环:
foreach( $urls as $url ) {
foreach( $colors as $color ) {
$result[] = $url.'?color='.$color;
}
}
现在$result
包含两个CSV中数据的组合列表。此$result
数组可以转换为CSV。 SO上有很多可用的示例:Convert array into csv