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

使用PHP将数据添加到特定列中的csv文件,php,database,csv,fputcsv,Php,Database,Csv,Fputcsv,我有一个csv文件,它有14列和数百行。有一个标题是“sku”、“类别”、“说明”、“品牌”等 所有数据都已准备就绪,但我正在尝试在CSV中的某些特定列(“图像”、“小图像”、“thumnail”)中添加一些图像文件名。 标题类型如下所示: +-----+----------+-------------+-------+-------------+-----------+--------+------+ | sku | category | description | image | small

我有一个csv文件,它有14列和数百行。有一个标题是“sku”、“类别”、“说明”、“品牌”等

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

标题类型如下所示:

+-----+----------+-------------+-------+-------------+-----------+--------+------+
| sku | category | description | image | small_image | thumbnail |  price | color|
+-----+----------+-------------+-------+-------------+-----------+--------+------+
因此,如果知道标题的外观,那么第一行将如下所示:

+-------+---------------+------------------+---+---+----+-----+--------+
| sku01 | category name | description here |   |   |    | 99$ | black  |
+-------+---------------+------------------+---+---+----+-----+--------+
jpeg的文件名与同一行上的
sku
值相同,扩展名为jpeg。例如,如果第一行的
sku
列中有
sku01
,则同一行的image列中的文件名将是
sku01.jpeg
。小图像值和缩略图值也是如此

但是,仅当jpeg存在于文件夹中时,才会指定文件名。

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

但是,对于我来说,关于我应该以什么顺序使用这些函数,我的脑子里仍然是一团乱麻。我卡住了。此外,我不知道如何将jpeg文件名放在正确的列(图像、缩略图、小图片)中,因为这些列位于csv文件的“中间”以及其他列中。它们不在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);

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

非常感谢您的帮助。我明白了。我不知道如何将这些值放回CSV。这是我的代码:谢谢,但是我仍然有问题,我可能做了一些错误,因为我得到了一个错误:警告:array_combine()期望参数2为array,boolean givenIt可能您的csv文件有编码问题。帮我个忙,到终点站去。找到存储文件的目录并运行
file file.csv
,其中“file.csv”是文件名。在这里发布输出。感谢您的回复。终于成功了!有几个问题。你是对的,当我签入notepad++时,它是ANSI的,我用UTF-8编码的。另外,$data['sku']给出了以下错误:未定义索引:sku,我更改为$row['sku']。创建的新csv文件中包含正确的数据。非常感谢您的详细回复和后续行动,非常感谢,我想通过paypal向您发送几美元来感谢您,因为您在这里确实帮助了我,您可以在mlclm(dot)design(at)gmail(dot)com上给我发邮件,让我知道您的paypal地址。感谢您的报价,我非常乐意提供帮助,免费:)