在 PHP 7.2 和 Prestashop 1.7 上导出 XML 多个值时出现问题

我正在尝试将产品从 Prestashop 1.7 导出到 XML。一切正常,但脚本多次导出产品,具体取决于所属类别。例如 Product1 在 All products - Clothes - Men 中,在这种情况下将以 XML 导出 3 次。

我尝试使用基于产品 ID 的 array_unique,但它不起作用。有人可以给我指出正确的方向吗?

完整的代码可以在这里找到: https: //pastebin.com/MQxfYSj2

在这部分代码中,我尝试使用 array_unique 但没有结果:

 private function getProductFromArray($arrProduct){

    $objProduct = new Okazii_Connector_Product();


    $objProduct->ID = $arrProduct['id_product'];

    $objProduct->UniqueID = $arrProduct['id_product'];

    $objProduct->Title = $arrProduct['name'];

    if (mb_strlen($arrProduct['description']) > 3){

        $objProduct->Description = $arrProduct['description'];

    } else if (mb_strlen($arrProduct['description_short'])) {

        $objProduct->Description = $arrProduct['description_short'];

    } else {

        $objProduct->Description = $arrProduct['name'];

    }

    $objProduct->Amount = $arrProduct['quantity'];


    if ($objProduct->Amount == 0){

        $objProduct->Amount = $this->getAmountFromStock($arrProduct['id_product']);

    }

    $objProduct->Category = $this->getCategoryString($arrProduct['id_category']);

    $objProduct->Currency = $this->getCurrency();

    $objProduct->Price = $arrProduct['price'];


    if(!empty($arrProduct['available_now']) && $objProduct->Amount > 0)

    {

        $objProduct->InStock = $arrProduct['available_now'];

    }


    if(!empty($arrProduct['gtin']))

    {

        $objProduct->GTIN = $arrProduct['gtin'];

    }

    else if(!empty($arrProduct['ean13']))

    {

        $objProduct->GTIN = $arrProduct['ean13'];

    }

    else if(!empty($arrProduct['isbn']))

    {

        $objProduct->GTIN = $arrProduct['isbn'];

    }


    $this->setProductImages($objProduct);

    $this->setProductBrand($objProduct, $arrProduct['id_manufacturer']);


    return $objProduct;

}

我还尝试在脚本顶部仅获取基于产品 ID 的唯一产品,但效果不佳。


其他有用信息:PHP 7.2、Prestashop 1.7.6.5


江户川乱折腾
浏览 84回答 1
1回答

宝慕林4294392

尝试在类的最开始创建一个属性,例如private $exportedProductsIds = [];然后在每次迭代之后,在返回之前将导出的产品 ID 放入其中array_push($this->exportedProductsIds, $objProduct->id);然后在运行前添加验证,如果 id 已经在$exportedProductsIds然后跳过迭代if (!in_array($objProduct->id, $this->exportedProductsIds)) {   //run your code}但我认为放置此代码的最佳位置是您调用getProductFromArray方法的地方。我假设是这样的private function exportProducts($products){     foreach ($products as $product) {         if (in_array($objProduct->id, $this->exportedProductsIds)) {             continue;         }         if ($this->getProductFromArray($arrProduct)) {             array_push($this->exportedProductsIds, $objProduct->id);         }     }}
打开App,查看更多内容
随时随地看视频慕课网APP