PHP-从foreach中删除重复项
在Magento中,我有一个包含产品的数组,我希望从这些产品中获得它们所在的类别。这就是我所拥有的,但我正在使用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
<?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]的输出;在一个数组中,通过循环删除重复项?