@Genri_Rus

Как поместить ключ в цикле во внутрь массива?

Есть цикл с товарами:
$data = [];

foreach ($products as $product) {
	$data['products'][] = array(
		'product_id'  		=> $product['product_id'],
		'name'        		=> $product['name'],
		'price'       		=> $price,
		'special'     		=> $special,
		'tax'         		=> $tax,
		'minimum'     		=> $product['minimum'] > 0 ? $product['minimum'] : 1,
		'rating'      		=> $product['rating'],
	);
	
	$cart_products = $this->cart->getProducts()
	
	foreach ($cart_products as $cart_product) { 
		if ($cart_product['id'] == $product['product_id']) {
			$data['products'][] = array( 
				'quantity' => $cart_product['quantity'] > 0 ? $cart_product['quantity'] : 1
			);
		}
	}
}

Как мне ключ quantity добавить в внутрь каждой итерации ?
6007385a0f452568298869.png
  • Вопрос задан
  • 57 просмотров
Решения вопроса 1
@eandr_67
web-программист (*AMP, Go, JavaScript, вёрстка).
Простейшая модификация:
$data = [];

foreach ($products as $product) {
    $temp = [
        'product_id' => $product['product_id'],
        'name'       => $product['name'],
        'price'      => $price,
        'special'    => $special,
        'tax'        => $tax,
        'minimum'    => $product['minimum'] > 0 ? $product['minimum'] : 1,
        'rating'     => $product['rating'],
    ];

    $cart_products = $this->cart->getProducts();

    foreach ($cart_products as $cart_product) {
        if ($cart_product['id'] == $product['product_id']) {
            $temp['quantity'] = $cart_product['quantity'] > 0 ? $cart_product['quantity'] : 1;
        }
    }
    
    $data['products'][] = $temp;
}

Но я бы изменил логику:
$cart_products = $this->cart->getProducts();
// если ключи массива - уже столбец id, строчка не нужна
$cart_products = array_combine(array_column($cart_products, 'id'), $cart_products);

$data = [];

foreach ($products as $product) {
    $data['products'][]  = [
        'product_id' => $product['product_id'],
        'name'       => $product['name'],
        'price'      => $price,
        'special'    => $special,
        'tax'        => $tax,
        'minimum'    => $product['minimum'] > 0 ? $product['minimum'] : 1,
        'rating'     => $product['rating'],
        'quantity'   => $cart_products[$product['product_id']]['quantity'] > 0 ? $cart_products[$product['product_id']]['quantity'] : 1
    ];
}

P.S. Можно и дальше экспериментировать с кодом:
$cart_products = $this->cart->getProducts();
$cart_products = array_combine(array_column($cart_products, 'id'), array_column($cart_products, 'quantity'));

$data = [];

foreach ($products as $product) {
    $data['products'][]  = [
        'product_id' => $product['product_id'],
        'name'       => $product['name'],
        'price'      => $price,
        'special'    => $special,
        'tax'        => $tax,
        'minimum'    => $product['minimum'] > 0 ? $product['minimum'] : 1,
        'rating'     => $product['rating'],
        'quantity'   => $cart_products[$product['product_id']] > 0 ? $cart_products[$product['product_id']] : 1
    ];
}

И это ещё не предел упрощения основного цикла...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽