Создайте массив с этим выражением $products[] = $product[$category_id][$product_id]
:
$products = array(
33 => array(
31 => array(
'model' => 'Product 4',
'product_id' => 31,
'sku' => '',
'ean' => '1234',
'price' => '80.0000'
),
8733 => array(
'model' => 'qqq',
'product_id' => 8733,
'sku' => '',
'ean' => '1000',
'price' => '344.6281'
)
),
25 => array(
30 => array(
'model' => 'Product 3',
'product_id' => 30,
'sku' => '',
'ean' => '250',
'price' => '50.4132'
),
31 => array(
'model' => 'Product 4',
'product_id' => 31,
'sku' => '',
'ean' => '1234',
'price' => '80.0000'
)
)
);
Мне нужно удалить дублированный продукт в php, и результат должен быть:
$products = array(
33 => array(
8733 => array(
'model' => 'qqq',
'product_id' => 8733,
'sku' => '',
'ean' => '1000',
'price' => '344.6281'
)
),
25 => array(
30 => array(
'model' => 'Product 3',
'product_id' => 30,
'sku' => '',
'ean' => '250',
'price' => '50.4132'
),
31 => array(
'model' => 'Product 4',
'product_id' => 31,
'sku' => '',
'ean' => '1234',
'price' => '80.0000'
),
)
);
Я пробовал это:
$cleared_products = array();
foreach ($products as $category_id => $category_products) {
foreach ($category_products as $product_id => $product) {
if (isset($cleared_products[$category_id][$product_id])) {
unset($products[$category_id][$product_id]);
} else {
$cleared_products[$category_id][$product_id] = $product;
}
}
}
Но не работает...
🤔 А знаете ли вы, что...
С PHP можно работать с файлами и директориями на сервере.
Проблема с вашим кодом в том, что вы проверяете, существует ли продукт в своей категории. В вашем примере дубликат продукта относится к двум категориям.
Мы можем легко настроить его, отслеживая добавленный вами идентификатор.
$cleared_products = array();
$productIds = array();
foreach ($products as $category_id => $category_products) {
foreach ($category_products as $product_id => $product) {
if (in_array($product_id, $productIds)) {
continue;
} else {
$productIds[] = $product_id;
$cleared_products[$category_id][$product_id] = $product;
}
}
}
Важное примечание: вы не можете контролировать, из какой категории будет отфильтрован элемент.
Таким образом, ожидаемый результат не соответствует этому коду. Если вы определите приоритет категорий и отсортируете их по этому признаку, вы сможете удалить их там, где захотите.
Решение
$products = array(
33 => array(
31 => array(
'model' => 'Product 4',
'product_id' => 31,
'sku' => '',
'ean' => '1234',
'price' => '80.0000'
),
8733 => array(
'model' => 'qqq',
'product_id' => 8733,
'sku' => '',
'ean' => '1000',
'price' => '344.6281'
)
),
25 => array(
30 => array(
'model' => 'Product 3',
'product_id' => 30,
'sku' => '',
'ean' => '250',
'price' => '50.4132'
),
31 => array(
'model' => 'Product 4',
'product_id' => 31,
'sku' => '',
'ean' => '1234',
'price' => '80.0000'
)
)
);
// Create a new array to store unique products
$uniqueProducts = array();
foreach ($products as $parentKey => $items) {
foreach ($items as $productId => $product) {
$found = false;
// Check if the product already exists in the uniqueProducts array
foreach ($uniqueProducts as $existingItems) {
if (isset($existingItems[$productId]) && $existingItems[$productId] == $product) {
$found = true;
break;
}
}
// If the product is not found, add it to the uniqueProducts array
if (!$found) {
$uniqueProducts[$parentKey][$productId] = $product;
}
}
}
// Output the unique products array
print_r($uniqueProducts);
Выход:
Array
(
[33] => Array
(
[31] => Array
(
[model] => Product 4
[product_id] => 31
[sku] =>
[ean] => 1234
[price] => 80.0000
)
[8733] => Array
(
[model] => qqq
[product_id] => 8733
[sku] =>
[ean] => 1000
[price] => 344.6281
)
)
[25] => Array
(
[30] => Array
(
[model] => Product 3
[product_id] => 30
[sku] =>
[ean] => 250
[price] => 50.4132
)
)
)
Онлайн-исполнение: 3v4l
Объяснение:
$uniqueProducts
, чтобы хранить товары без дубликатов.$products
.$uniqueProducts
, сравнив его product_id
и детали.$uniqueProducts
.