从csv文件产品问题导入Magento

时间:2017-08-27 18:28:56

标签: php magento import-from-excel

我们有Magento的进口产品供应商表。

问题:

供应商工作表中的

图像位于不同的文件夹中但具有相同的图像

喜欢:

folder1/image.jpg

folder2/image.jpg 

现在,当我们在Magento中导入时,所有图像都在同一个文件夹中。每个产品都有相同的图像。

我怎样才能解决这个问题?

1 个答案:

答案 0 :(得分:0)

如果图像的名称总是相同(如在您的示例中),那么您可以简单地存储您处理的所有图像名称(不包括目录),并检查它是否在该数组中

否则,您将不得不比较图像,如下所示。此代码假定您有一个名为$filenames的每个图像的文件名数组。

实施例

$imageHashes = []; //Define an array where hash of each image will be stored
$uniqueFiles = []; //The array which will contain only image files that are unique.

for ($i=0;$i<count($filenames);$i++) { //Loop through the filenames
    $hash = md5_file($filenames[$i]); //Get the hash of the image
    if (!in_array($hash,$imageHashes)) { //If the imageHashes array does not contain the hash, then this is a new image
        $imageHashes[] = $hash; //Add the hash to the imageHashes array
        $uniqueFiles[] = $filenames[$i]; //Add the filename to the list of filenames for unique images.
    }
}

散列

这是有效的,因为散列算法应该为放入其中的任何内容生成不同的散列。虽然 md5对于长时间存储密码一直不安全 ,但在此上下文中使用它仍然完全没问题。

因此,每次循环运行时,它都会获取当前文件名的文件哈希值,然后检查数组中是否已存在该哈希值。如果确实如此,则没有任何反应(请记住,同一个文件应始终具有相同的散列,因此图像的相同克隆也应共享相同的散列),因为已经找到并处理了该图像。否则,我们将哈希添加到$imageHashes表中(以便我们可以在下一次传递中与它进行比较),并将文件名添加到$uniqueFiles数组中,以便我们以后可以使用它。 / p>

在此过程结束时,我们应该有一个数组,其中只包含每个图像第一次出现的文件名。

备注

  • 您可以在PHP Manual中找到有关md5_file的更多信息;

  • 有一篇很棒的StackOverflow帖子here,讨论了使用PHP比较两个图像文件的其他方法。