读取两个csv文件并使用php

时间:2015-06-12 06:22:00

标签: php csv

我想连接两个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);

1 个答案:

答案 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