Задать вопрос
@Genri_Rus

Как проверить массив на уникальные значения?

Допустим на примере данного сайта: ссылка

Есть массив с товарами и опциями к ним. Как можно добавлять в корзину только уникальные значения?
$product_id = $_POST['product_id'];
$product_options = $_POST['options'];

$products = array();

if (!isset($_SESSION['cart'])) {
	$_SESSION['cart'] = array();
} else {
	$products = $_SESSION['cart']['products'];
}

// массив с товарами
$products = array(
	array(
		'product_id' => 1,
		'name' => 'Пирожок с картошкой',
		'price' => 50,
		'options' => array(
			array(
				'option_id' => 1,
				'name' => 'с сыром',
				'price' => 40
			),
			array(
				'option_id' => 2,
				'name' => 'с мясом',
				'price' => 80
			),
			array(
				'option_id' => 3,
				'name' => 'с вишней',
				'price' => 20
			)
		)
	),
	array(
		'product_id' => 2,
		'name' => 'Пицца',
		'price' => 300,
		'options' => array(
			array(
				'option_id' => 4,
				'name' => 'с сыром',
				'price' => 50
			),
			array(
				'option_id' => 5,
				'name' => 'с колбасой',
				'price' => 80
			),
			array(
				'option_id' => 6,
				'name' => 'с помидорами',
				'price' => 30
			)
		)
	)
)

Вариантов у опций может быть много (radio и checkbox), если товар и опции повторяются, то увеличивать их на 1.
А если не повторяются, то добавлять как новый товар в корзину.
Насколько я понял первый товар добавляется без проверок, а вот последующие товары как в цикле проверять на повтор?
  • Вопрос задан
  • 271 просмотр
Подписаться 1 Средний Комментировать
Решения вопроса 2
iMedved2009
@iMedved2009
Не люблю людей
$product_id = $_POST['product_id'];
$product_options = $_POST['options'];
$product_key = md5($product_id.serialize($product_options));

$products[$product_key] = [..........];
Ответ написан
HighTechLowLife
@HighTechLowLife
Какой ещё хеш в соседних ответах, если уникальный ключ можно получить конкатенацией.

$productId = (int)$_POST['product_id'];
$optionIds = array_map('intval', $_POST['option_ids']);
sort($optionIds);
$productKey = $productId . ':' . implode(',', $optionIds);

if (!isset($_SESSION['cart'][$productKey])) {
    $_SESSION['cart'][$productKey] = [
        'product_id' => $productId,
        'options' => $optionIds,
        'count' => 1,
    ];
} else {
    $_SESSION['cart'][$productKey]['count']++;
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
iiiBird
@iiiBird
Пока ты спишь - твой конкурент совершенствуется
Как вариант можно при добавлении товара в корзину сделать поле, в которое будет писаться строка или хэш строки "Средняя 30 см, традиционное тесто + пикантная пепперони, острая чоризо, кубики брынзы".
А потом просто сравнивать эту строку. Если совпали - значит такой же товар добавляется.
Ответ написан
SilenceOfWinter
@SilenceOfWinter Куратор тега PHP
та еще зажигалка...
используй id в качестве ключей: product_id + '_' + option_id, это значительно упростит поиск
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы