如果子数组中的元素已存在于另一个元素中,则删除整个数组元素
Removing entire array elements if an element in a sub array already exists in another element
我有一个多维数组,由产品组成。每个子数组都有一个产品类型。 productType 位于 Product 数组内的数组中,这样;
0 => product [
productType [
id: 2
]
]
1 => product [
productType [
id: 1
]
]
2 => product [
productType [
id: 2
]
]
]
我需要删除整个数组元素,如果 id 已经存在,在这个例子中,我需要删除 EITHER array[0] 或 array[2],没关系,因为我只需要productType[id]
填充框。
我创建了一个循环来创建一个已经存在的 ID 数组,但它涉及创建 2 个新数组:
//This works but seems a bit inefficient
$productFinal = [];
$ids = [];
foreach ($products as $product) {
if (!in_array($product->getproductType()->getid(), $ids)) {
$productFinal[] = $product;
}
$ids[] = $product->getproductType()->getid();
}
我得到了我想要的结果,但是我确信有一种更有效的方法可以做到这一点,最好是使用内置的 php 函数。
如果您还获得了每个元素的键,则可以在 foreach 循环中根据需要删除该元素:
$ids = [];
foreach ($products as $key => $product {
$id = $product->getproductType()->getid();
if (in_array($id, $ids)) {
unset($product[$key];
} else {
$ids[] = $id;
}
}
不需要循环,您可以使用array_column使数组具有关联性,这将删除任何重复项。
然后使用 array_values 使数组再次索引。
$arr = array_values(array_column($arr, Null, "id"));
我有一个多维数组,由产品组成。每个子数组都有一个产品类型。 productType 位于 Product 数组内的数组中,这样;
0 => product [
productType [
id: 2
]
]
1 => product [
productType [
id: 1
]
]
2 => product [
productType [
id: 2
]
]
]
我需要删除整个数组元素,如果 id 已经存在,在这个例子中,我需要删除 EITHER array[0] 或 array[2],没关系,因为我只需要productType[id]
填充框。
我创建了一个循环来创建一个已经存在的 ID 数组,但它涉及创建 2 个新数组:
//This works but seems a bit inefficient
$productFinal = [];
$ids = [];
foreach ($products as $product) {
if (!in_array($product->getproductType()->getid(), $ids)) {
$productFinal[] = $product;
}
$ids[] = $product->getproductType()->getid();
}
我得到了我想要的结果,但是我确信有一种更有效的方法可以做到这一点,最好是使用内置的 php 函数。
如果您还获得了每个元素的键,则可以在 foreach 循环中根据需要删除该元素:
$ids = [];
foreach ($products as $key => $product {
$id = $product->getproductType()->getid();
if (in_array($id, $ids)) {
unset($product[$key];
} else {
$ids[] = $id;
}
}
不需要循环,您可以使用array_column使数组具有关联性,这将删除任何重复项。
然后使用 array_values 使数组再次索引。
$arr = array_values(array_column($arr, Null, "id"));