Прошу помощи в выводе информации по условию

Nemo Cpt.

Ничего нет более постоянного, чем временное.
Всем привет!
Прошу, помогите разобраться с выводом информации. Уже всю голову сломал, но к результату так и не пришел.
Суть в том, что я вывожу в корзину товар и при добавлении в нее позиции с определенной категорией (3), все остальные и она в том числе должны пересчитываться -15%.
Но по факту пересчитывается только та, у которой категория = 3. При чем только она. Почему так?

Вот условие, которое я написал, не могу понять, что не так:
PHP:
<?php foreach ($products as $product): ?>

/*Тут я проверяю в массиве соответствие категории №3 и позиции с этой же категорией в добавленных товарах*/

<?php if (in_array($categories[3]['id'] == $product['category_id'], $products)): ?>
<span class="amount"><nobr><?php echo $productsInCart[$product['id']] * $product['priceStock']; ?> руб</nobr></span>
<span class="amount-del"><nobr><del><?php echo $productsInCart[$product['id']] * $product['price']; ?> руб</nobr></del><br></span>
<?php else: ?>
<span class="amount"><nobr><?php echo $productsInCart[$product['id']] * $product['price']; ?> руб</nobr></span>
</tr><?php endforeach; ?>
 
Последнее редактирование:
/*Тут я проверяю в массиве соответствие категории №3 и позиции с этой же категорией в добавленных товарах*/
Нет. То, что ты написал, это
in_array(true, $products)
или
in_array(false, $products)
в зависимости от того, равно у тебя там или нет. Ты явно хочешь чего-то другого.
 
в зависимости от того, равно у тебя там или нет. Ты явно хочешь чего-то другого.
Именно!
Я никак не соображу, как при добавлении позиции с категорией 3 в корзину мне пересчитать все
 
Напиши, что тебе надо, ручками, безо всяких in_array. Цикл, там, условие, флаг что найдено. Я не знаю, что у тебя в каких переменных, да и ты не очень понятно объясняешь, что тебе надо.
 
да и ты не очень понятно объясняешь
Извиняюсь.

в массиве $products содержатся массивы данных о всех товарах, добавленных в корзину
в массивах с товарами передаю параметры: id, name, price, category_id и т.д.
с помощью цикла foreach вывожу все.

Мне надо, чтобы при добавлении товара в корзину, где его category_id = 3 все остальные позиции с другими категориями и эта в том числе пересчитывались $product['price'] / 1.15
Вроде правильно описал.
Спасибо!
 
неужели никто не подскажет?((
 
У вас два действия.
1. Определить, есть ли в корзине скидочная карта.
2. Если есть - пересчитать цены.
А вы всё пытаетесь сделать в одном цикле. Ну не тупо ли?
 
1. Определить, есть ли в корзине скидочная карта.
2. Если есть - пересчитать цены.
А вы всё пытаетесь сделать в одном цикле. Ну не тупо ли?

Результат получил в рамках одного цикла все-таки...Не знаю, тупо ли это. Но факт в том, что все работает
 

Может быть не совсем верно, но работает!

PHP:
/*новая строка в коде*/
<?php if ($products): ?>

<?php foreach ($products as $product): ?>

/*Тут я проверяю в массиве соответствие категории №3 и позиции с этой же категорией в добавленных товарах

Тут строка тоже изменена строка с обращением к конкретным значениям. т.к. у меня товар, попадающий в корзину с этой категорией подставляется сразу вверх.

Но и тот вариант на который Вы меня подтолкнули  я тоже реализовал в контроллере (и он работает)

Хотел просто все вывести в рамках одного цикла))

*/

<?php if ($products[0]['category_id'] == $categories[3]['id']): ?>
<span class="amount"><nobr><?php echo $productsInCart[$product['id']] * $product['priceStock']; ?> руб</nobr></span>
<span class="amount-del"><nobr><del><?php echo $productsInCart[$product['id']] * $product['price']; ?> руб</nobr></del><br></span>
<?php else: ?>
<span class="amount"><nobr><?php echo $productsInCart[$product['id']] * $product['price']; ?> руб</nobr></span>
</tr><?php endforeach; ?>

/* далее другая часть кода */
 
Вместо "<?php echo " достаточно "<?="
Вместо ручного секса с форматированием цены пора бы уже научиться печатать цену в деньгах.
PHP:
    $nf = new \NumberFormatter("ru_RU", \NumberFormatter::CURRENCY);
    $cs = ini_get('default_charset');
    $this->registerPlugin('modifier', 'price',
      function($price, $currency = 'RUB')
      use($nf, $cs)
      {
        return iconv('UTF-8', $cs, $nf->formatCurrency($price, $currency));
      }
    );
И, да, ты сделал именно то, от чего я тебя пытался предостеречь. Вини себя.
 
За то, что ты на каждый пункт корзины повторно сканируешь корзину.
 
За то, что ты на каждый пункт корзины повторно сканируешь корзину.

Могу ли я найти мануалы какие-нибудь по оптимизации кода и его выполнения? Если да, подскажите, где искать (понятно, что гугл), я не имею ввиду его, может быть есть книги, то какие?

И я не совсем понимаю то, почему все-таки не стоит все расписывать в html документе в <? code ?>. Подскажите? Я буду премного благодарен, я не в начале пути конечно, но нет полноценного образа в голове о том, как же все-таки стоит писать код, а как не стоит.
Спасибо!
 
Это не код, это алгоритм. Разницу понимаешь?

А второго вопроса я вообще не понял.
 
Раз разумеется, то почему ты вообще зедаёшь этот вопрос?
Напиши алгоритм работы твоего кода.
 
Сверху