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

Каким образом можно создать массив, где каждый элемент имеет формат [code => amount], где code представляет собой промокод и amount - сумма скидки в рублях, применяемая ко всему заказу?
  • 23 октября 2023 г. 14:48
Ответы на вопрос 2
В зависимости от используемого языка программирования, можно создать массив "купон" с помощью следующих методов:

1. В Python:

```python
coupons = [
    {"code": "coupon1", "amount": 100},
    {"code": "coupon2", "amount": 200},
    {"code": "coupon3", "amount": 50}
]
```

2. В JavaScript:

```javascript
var coupons = [
    {"code": "coupon1", "amount": 100},
    {"code": "coupon2", "amount": 200},
    {"code": "coupon3", "amount": 50}
];
```

3. В PHP:

```php
$coupons = [
    ["code" => "coupon1", "amount" => 100],
    ["code" => "coupon2", "amount" => 200],
    ["code" => "coupon3", "amount" => 50]
];
```

4. В Java:

```java
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Map<String, Integer> coupon1 = new HashMap<>();
        coupon1.put("code", 1);
        coupon1.put("amount", 100);
 
        Map<String, Integer> coupon2 = new HashMap<>();
        coupon2.put("code", 2);
        coupon2.put("amount", 200);
 
        Map<String, Integer> coupon3 = new HashMap<>();
        coupon3.put("code", 3);
        coupon3.put("amount", 50);
 
        List<Map<String, Integer>> coupons = new ArrayList<>();
        coupons.add(coupon1);
        coupons.add(coupon2);
        coupons.add(coupon3);
    }
}
```

Они создают массив "купон" с указанным форматом для каждого элемента. Сейчас в массиве представлены три примера, но вы можете добавить столько элементов, сколько вам необходимо для ваших подарочных кодов и скидок.
Один из возможных вариантов переформулирования данного кода:

protected function getCouponsResult($order, $basket)
{
    $productQuantity = [];
    foreach ($basket as $basketItem) {
        $id       = $basketItem->getId();
        $quantity = $basketItem->getQuantity();

        $productQuantity[$id] = $quantity;
    }

    $orderDiscounts = $order->getDiscount();
    $orderDiscounts = $orderDiscounts->getApplyResult(true);

    $couponsList   = $orderDiscounts['COUPON_LIST'];
    $couponsBasket = $orderDiscounts['RESULT']['BASKET'];
    $couponsPrices = $orderDiscounts['PRICES']['BASKET'];

    $coupons = [];
    foreach ($couponsList as $code => $data) {
        $coupons[$data['ORDER_DISCOUNT_ID']] = $code;
    }

    $prices = [];
    foreach ($couponsPrices as $productID => $data) {
        $quantity = isset($productQuantity[$productID]) ? $productQuantity[$productID] : 1;

        $prices[$productID] = $data['DISCOUNT'] * $quantity;
    }

    $result = [];
    foreach ($couponsBasket as $productID => $discounts) {
        foreach ($discounts as $discount) {
            $discountID = $discount['DISCOUNT_ID'];
            $code       = isset($coupons[$discountID]) ? $coupons[$discountID] : null;
            if (!$code) {
                continue;
            }

            $result[$code] = isset($result[$code]) ? $result[$code] : 0;
            $price         = isset($prices[$productID]) ? $prices[$productID] : 0;

            $result[$code] += $price;
        }
    }

    $formattedResult = [];
    foreach ($result as $code => $amount) {
        $formattedResult[] = [
            'promoCodeId'    => $code,
            'discountAmount' => $amount * 100
        ];
    }

    return $formattedResult;
}
Похожие вопросы