PHP-从foreach中删除重复项

PHP-从foreach中删除重复项,php,foreach,duplicates,Php,Foreach,Duplicates,在Magento中,我有一个包含产品的数组,我希望从这些产品中获得它们所在的类别。这就是我所拥有的,但我正在使用foreach来浏览产品,因此需要删除重复项 <?php foreach ($_productCollection as $_product): ?> <div class="bk-all-products"> <?php $bk_product_id = $_product->getCategoryI

在Magento中,我有一个包含产品的数组,我希望从这些产品中获得它们所在的类别。这就是我所拥有的,但我正在使用foreach来浏览产品,因此需要删除重复项

<?php foreach ($_productCollection as $_product): ?>
    <div class="bk-all-products">
        <?php
            $bk_product_id = $_product->getCategoryIds(); 
            $bk_category_id = $bk_product_id[1];

            $categoryId = $bk_category_id;
            $_objectManager = \Magento\Framework\App\ObjectManager::getInstance();
            $category = $_objectManager->create('Magento\Catalog\Model\Category')
            ->load($categoryId);
            $bk_category_id_name = $category->getName();

            echo $bk_category_id_name;

            echo "<br><br>";
        ?>
    </div>
<?php endforeach; ?>
我已经有了foreach的类别名称,但是现在有一些重复的名称需要删除

<?php foreach ($_productCollection as $_product): ?>
    <div class="bk-all-products">
        <?php
            $bk_product_id = $_product->getCategoryIds(); 
            $bk_category_id = $bk_product_id[1];

            $categoryId = $bk_category_id;
            $_objectManager = \Magento\Framework\App\ObjectManager::getInstance();
            $category = $_objectManager->create('Magento\Catalog\Model\Category')
            ->load($categoryId);
            $bk_category_id_name = $category->getName();

            echo $bk_category_id_name;

            echo "<br><br>";
        ?>
    </div>
<?php endforeach; ?>

其他信息

这是在foreach中打印数组时返回的结果:

数组([0]=>354[1]=>362[2]=>360[3]=>414)Cafeïnevrije koffie

数组([0]=>354[1]=>362[2]=>364[3]=>414)Cafeïnevrije koffie

数组([0]=>354[1]=>367)Koffiepakketten

数组([0]=>354[1]=>364)过滤器

阵列([0]=>354[1]=>360)浓缩咖啡

阵列([0]=>354[1]=>360[2]=>414)浓缩咖啡

数组([0]=>354[1]=>364[2]=>414)过滤器

阵列([0]=>354[1]=>360[2]=>414)浓缩咖啡

数组([0]=>354[1]=>367)Koffiepakketten

数组([0]=>354[1]=>367)Koffiepakketten

数组([0]=>367[1]=>354)Koffiebonen


数组([0]=>367[1]=>354)Koffiebonen

简单的方法是将已显示的类别存储在
数组中,并使用

编辑:存储id可能比存储名称更好,因为如果已经获取名称,则可以避免获取名称:

<?php
$diplayed_categories = []; //initializing array
foreach ($_productCollection as $_product):
?>
    <div class="bk-all-products">
        <?php
            $bk_product_id = $_product->getCategoryIds(); 
            $bk_category_id = $bk_product_id[1];

            if(!in_array($bk_category_id, $diplayed_categories)){ //testing if not in array
                $diplayed_categories[] = $bk_category_id; //filling the array

                //moved inside the if, no need to fetch it again if it exists
                //$categoryId = $bk_category_id; //useless var
                $_objectManager = \Magento\Framework\App\ObjectManager::getInstance();
                $category = $_objectManager->create('Magento\Catalog\Model\Category')
                  ->load($bk_category_id); //replaced by $bk_category_id
                $bk_category_id_name = $category->getName();

                echo $bk_category_id_name;

                echo "<br><br>";
            }
        ?>
    </div>
<?php endforeach; ?>

简单的方法是将已显示的类别存储在
数组中,并使用

编辑:存储id可能比存储名称更好,因为如果已经获取名称,则可以避免获取名称:

<?php
$diplayed_categories = []; //initializing array
foreach ($_productCollection as $_product):
?>
    <div class="bk-all-products">
        <?php
            $bk_product_id = $_product->getCategoryIds(); 
            $bk_category_id = $bk_product_id[1];

            if(!in_array($bk_category_id, $diplayed_categories)){ //testing if not in array
                $diplayed_categories[] = $bk_category_id; //filling the array

                //moved inside the if, no need to fetch it again if it exists
                //$categoryId = $bk_category_id; //useless var
                $_objectManager = \Magento\Framework\App\ObjectManager::getInstance();
                $category = $_objectManager->create('Magento\Catalog\Model\Category')
                  ->load($bk_category_id); //replaced by $bk_category_id
                $bk_category_id_name = $category->getName();

                echo $bk_category_id_name;

                echo "<br><br>";
            }
        ?>
    </div>
<?php endforeach; ?>


使用数组存储输出的数据,在输出数据之前,测试数据是否在数组中重复产品或在集合中跨产品重复类别?在sql查询中执行此操作可能通过将类似产品或类别分组更好为什么不在sql查询中选择
DISTINCT
?否则,如果您无法控制它,可以使用
array_unique()
,它还可以扩展为另一个参数,指示结果数组的排序行为。@DarkBee如何存储$bk_product_id[1]的输出;在一个数组中,通过循环删除重复项?在输出一个之前,使用一个数组将输出项存储在,测试它是否在集合中的阵列重复产品或跨产品重复类别中?在sql查询中执行此操作可能通过将类似产品或类别分组更好为什么不在sql查询中选择
DISTINCT
?否则,如果您无法控制它,可以使用
array_unique()
,它还可以扩展为另一个参数,指示结果数组的排序行为。@DarkBee如何存储$bk_product_id[1]的输出;在一个数组中,通过循环删除重复项?