从阵列中删除重复的产品

时间:2015-01-27 07:17:53

标签: php arrays magento

我从Magento的客户订购的所有订单中提取所有产品,我需要删除任何重复的产品,我想我需要在foreach中添加另一个循环($ ordered_items as $ item){section删除任何重复,但我尝试的一切似乎都没有效果?下面的代码从登录客户的所有订单中获取所有产品(还有一点,但这是我需要删除重复的地方)

foreach($collection as $order){

$order_id = $order->getId();

$order = Mage::getModel("sales/order")->load($order_id); //load order by order id 

$ordered_items = $order->getAllItems(); 

foreach($ordered_items as $item){     //item detail  

完整代码

<?php if (Mage::getSingleton('customer/session')->isLoggedIn()) {

/* Get the customer data */
$customer = Mage::getSingleton('customer/session')->getCustomer();
/* Get the customer's email address */
$customer_email = $customer->getEmail();

}

$collection = Mage::getModel('sales/order')
                ->getCollection()
                ->addAttributeToFilter('customer_email',array('like'=>$customer_email));

foreach($collection as $order){
//do something
$order_id = $order->getId();

$order = Mage::getModel("sales/order")->load($order_id); //load order by order id 

$ordered_items = $order->getAllItems(); 

foreach($ordered_items as $item){     //item detail  

$_product = Mage::getModel('catalog/product')->load($item->getProductId());
$product_small_image_path = Mage::helper('catalog/image')->init($_product, 'small_image')->resize(200);
$product_thumbnail_path = Mage::helper('catalog/image')->init($_product, 'small_image')->resize(150);
$summaryData = Mage::getModel('review/review_summary')
   ->load($item->getProductId());

echo "<li>";

echo "<div class='previous-name'><p><a  style='color:black; font-weight:bold; font-size:14px;' href='" . $_product->getProductUrl() . "'>";
echo $item->getName() ."</a></p></div>"; 

echo "<div class='previous-image'><a href='" . $_product->getProductUrl() . "'>";
echo "<img src='" . $product_small_image_path . "' />";
echo "</a></div>";

echo "<div class='previous-rating'>";
echo "<p><a  style='color:black; font-weight:bold; font-size:14px;' href='" . $_product->getProductUrl() . "#product_tabs_review_tabbed'>Review this beer now</a></p>"; 

echo $summaryData->getRatingSummary().'% Would buy again <br/>';

echo "<div class='rating-box' style='float:left;'>"; 
echo "<div class='rating' style='width:" .$summaryData->getRatingSummary()."%'></div></div>"; 
echo "</div>";

echo "<div class='previous-button'>";
echo '<button type="button" title="Add to Cart" class="button btn-cart" onclick="setLocation(\'';
echo $this->helper('checkout/cart')->getAddUrl($_product);
echo '\')"><span><span>Order Again</span></span></button>';
echo "</div>";

echo "<div class='previous-clear'></div>";

echo "</li>";
} 
}
?> 

2 个答案:

答案 0 :(得分:1)

array_unique()

怎么样?
$ordered_items = array_unique($ordered_items);

答案 1 :(得分:1)

另一种避免额外foreach和PHP处理的简单方法,将产品sku存放在一个数组中并检查它是否已存在于该数组中。如果我在您之前的代码中修改了以下内容:

<?php
if (Mage::getSingleton('customer/session')->isLoggedIn()) {

    /* Get the customer data */
    $customer       = Mage::getSingleton('customer/session')->getCustomer();
    /* Get the customer's email address */
    $customer_email = $customer->getEmail();

}

$collection = Mage::getModel('sales/order')->getCollection()->addAttributeToFilter('customer_email', array(
    'like' => $customer_email
));
$uniuqProductSkus = array();
foreach ($collection as $order) {
    //do something
    $order_id = $order->getId();

    $order = Mage::getModel("sales/order")->load($order_id); //load order by order id 

    $ordered_items = $order->getAllItems();

    // -----------------Initialized an empty array to store unique products SKUS

    foreach ($ordered_items as $item) {
     //item detail  
        //Check if product already exists  in uniuqProductSkus array, means it is duplicate, do not process, continue
        if (in_array($item->getProduct()->getSku(), $uniuqProductSkus)) {
            continue;
        } else {
            // product is not yet found, push  into the uniuqProductSkus array
            array_push($uniuqProductSkus, $item->getProduct()->getSku());
            $_product                 = Mage::getModel('catalog/product')->load($item->getProductId());
            $product_small_image_path = Mage::helper('catalog/image')->init($_product, 'small_image')->resize(200);
            $product_thumbnail_path   = Mage::helper('catalog/image')->init($_product, 'small_image')->resize(150);
            $summaryData              = Mage::getModel('review/review_summary')->load($item->getProductId());

            echo "<li>";

            echo "<div class='previous-name'><p><a  style='color:black; font-weight:bold; font-size:14px;' href='" . $_product->getProductUrl() . "'>";
            echo $item->getName() . "</a></p></div>";

            echo "<div class='previous-image'><a href='" . $_product->getProductUrl() . "'>";
            echo "<img src='" . $product_small_image_path . "' />";
            echo "</a></div>";

            echo "<div class='previous-rating'>";
            echo "<p><a  style='color:black; font-weight:bold; font-size:14px;' href='" . $_product->getProductUrl() . "#product_tabs_review_tabbed'>Review this beer now</a></p>";

            echo $summaryData->getRatingSummary() . '% Would buy again <br/>';

            echo "<div class='rating-box' style='float:left;'>";
            echo "<div class='rating' style='width:" . $summaryData->getRatingSummary() . "%'></div></div>";
            echo "</div>";

            echo "<div class='previous-button'>";
            echo '<button type="button" title="Add to Cart" class="button btn-cart" onclick="setLocation(\'';
            echo $this->helper('checkout/cart')->getAddUrl($_product);
            echo '\')"><span><span>Order Again</span></span></button>';
            echo "</div>";

            echo "<div class='previous-clear'></div>";

            echo "</li>";
        }
    }
}
?>