使用 PHP 将数据添加到特定列中的 csv 文件

Add data to csv file in specific columns using PHP

我有一个包含 14 列和数百行的 csv 文件。有一个 header 即 "sku","category","description","brand" 等等

所有数据都已准备就绪,但我正在尝试在 CSV 中的某些特定列中添加一些图像文件名 ( "images", "small_image" , "thumnail" ).

header 看起来像这样:

+-----+----------+-------------+-------+-------------+-----------+--------+------+
| sku | category | description | image | small_image | thumbnail |  price | color|
+-----+----------+-------------+-------+-------------+-----------+--------+------+

知道 header 的样子,那么第一行就是:

+-------+---------------+------------------+---+---+----+-----+--------+
| sku01 | category name | description here |   |   |    | 99$ | black  |
+-------+---------------+------------------+---+---+----+-----+--------+

jpeg 的文件名与同一行的 sku 值相同,扩展名为 jpeg。因此,例如,如果第一行的 sku 列有 sku01,则同一行的图像列中的文件名将是 sku01.jpeg。 small_image 值和缩略图值也是如此。

但是,只有在文件夹中存在 jpeg 时才会指定文件名。

到目前为止我知道如何使用 fopen 函数打开 csv 文件,最终将所有数据存储在一个数组中(我不知道这对我的情况是否有帮助),然后在某些时候使用 fputcsv检查服务器上特定文件夹中是否有 file_exist 后运行。

但是,对于我来说,我应该按照什么顺序使用函数,这仍然是我脑子里的一个大问题。我卡住了。另外,我不知道如何将 jpeg 文件名放在正确的列中(图像、缩略图、small_image),因为这些列在 csv 文件的 "middle" 中,还有其他列。它们不在 csv 文件的末尾

我真的很感谢任何能让我走上正确道路的人。

要完成您想做的事情,您应该首先将列完全按照原始 csv 文件中的显示方式拆分为数组:

$columns = ["sku","category","description","image","small_image","thumbnail", "price","color"];

然后您需要打开文件并遍历它,构建一个键值对的关联数组,检查是否存在该图像名称的文件,如果存在,则将正确的名称分配给数组。

$rootDir = ""; //Root directory where your image files are located
$file = fopen("filehandle.csv", "r"); //Open the old file for reading
$newFile = fopen("newfilehandle.csv", "w"); //Create a new file for writing

while (($data = fgetcsv($file)) !== FALSE) {
    $row = array_combine($columns, $data);
    $filename = "{$row['sku']}.jpeg";
    if (file_exists("$rootDir/$filename")) {
        $row['image'] = $filename;
        $row['small_image'] = $filename;
        $row['thumbnail'] =  $filename; 
    }
    fputcsv($newFile, array_values($row)); //write data into new file
}

fclose($file);
fclose($newFile);

现在您拥有插入了新值的原始文件的副本。