如果子数组中的一个元素已存在于另一个元素中,则删除整个数组元素

时间:2019-01-30 08:52:55

标签: php arrays multidimensional-array array-unique

我有一个包含产品的多维数组。每个子阵列都有一个产品类型。 productType在Product数组内部的数组中,这样;

 0 => product [
  productType [
  id: 2
  ]
 ]
 1 => product [
  productType [
  id: 1
  ]
 ]
 2 => product [
  productType [
  id: 2
  ]
 ]
]

我需要删除整个数组元素,如果id已经存在,在此示例中,我需要删除EITHER array [0]或array [2],因为我只需要{{ 1}}以填充该框。

我创建了一个循环,该循环创建了已经存在的ID的数组,但是它涉及到制作2个新数组:

productType[id]

我得到了想要的结果,但是我确信有一种更有效的方法,最好使用内置的php函数。

2 个答案:

答案 0 :(得分:0)

如果您还获得了每个元素的键,则可以根据需要在foreach循环中删除该元素:

$ids = [];
foreach ($products as $key => $product {
   $id = $product->getproductType()->getid();
   if (in_array($id, $ids)) {
      unset($product[$key];
   } else {
      $ids[] = $id;
   }
}

答案 1 :(得分:0)

不需要循环,可以使用array_column使数组具有关联性,这将删除所有重复项。
然后使用array_values使数组再次索引。

$arr = array_values(array_column($arr, Null, "id"));