-1

私はMagento製品のcsvファイルに取り組んでおり、次のような3列のcsvファイルがあります

<pre>Name, description, Color</pre>
<pre>t-shirt, tshirt description, "green, blue, yellow"</pre>

ここで、列3列目(色)の値に基づいて、各行を別々のファイルに「new_products.csv」と言うように出力して、結果のファイルが次のようになるようにします。

<p>Name, description, Color</p>
<pre>t-shirt, tshirt description, green</pre>
<pre>t-shirt, tshirt description, blue</pre>
<pre>t-shirt, tshirt description, yellow</pre>

私はこのコードから始めました

$row = 1;

if (($handle = fopen("product.csv", "r")) !== FALSE) {
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
    $num = count($data);
            $name = $data[0];
    $desc = $data[1];

    for ($c=0; $c < $num; $c++) {


        $fp = fopen('new_products.csv', 'w');

        if($c == 2){ //if we are at color field
            $color = explode(',', $data[$c]);
            $color_count = count($color);
            for($i=0; $i<$color_count; $i++){

                fputcsv($fp, array($name,$desc,$color[$i]));
            }

        }

    }
            $row++;
}
fclose($handle);
}

ただし、上記のコードは最後の行のみを出力します。

ありがとう

4

1 に答える 1

3

ついに私は自分自身の解決策を見つけることができました。実際には、ファイルの最後にファイルポインタを設定する必要があります。

$row = 1;

if (($handle = fopen("test.csv", "r")) !== FALSE) {
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
    $num = count($data);
    $name = $data[0];
    $desc = $data[1];


    for ($c=0; $c < $num; $c++) {            

        if($c == 2){ //if we are at color field
          $fp = fopen('file.csv', 'a'); //Open for writing only; place the file pointer at the end of the file.
            $color = explode(',', $data[$c]);
            $color_count = count($color);
            for($i=0; $i<$color_count; $i++){
                fputcsv($fp, array($name,$desc,$color[$i]));
            }
            fclose($fp);
        }

    }

            $row++;
}
fclose($handle);

}

于 2013-03-25T09:35:42.147 に答える