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

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; ?>
 
Последнее редактирование:

fixxxer

К.О.
Партнер клуба
/*Тут я проверяю в массиве соответствие категории №3 и позиции с этой же категорией в добавленных товарах*/
Нет. То, что ты написал, это
in_array(true, $products)
или
in_array(false, $products)
в зависимости от того, равно у тебя там или нет. Ты явно хочешь чего-то другого.
 

Nemo Cpt.

Ничего нет более постоянного, чем временное.
в зависимости от того, равно у тебя там или нет. Ты явно хочешь чего-то другого.
Именно!
Я никак не соображу, как при добавлении позиции с категорией 3 в корзину мне пересчитать все
 

fixxxer

К.О.
Партнер клуба
Напиши, что тебе надо, ручками, безо всяких in_array. Цикл, там, условие, флаг что найдено. Я не знаю, что у тебя в каких переменных, да и ты не очень понятно объясняешь, что тебе надо.
 

Nemo Cpt.

Ничего нет более постоянного, чем временное.
да и ты не очень понятно объясняешь
Извиняюсь.

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

Мне надо, чтобы при добавлении товара в корзину, где его category_id = 3 все остальные позиции с другими категориями и эта в том числе пересчитывались $product['price'] / 1.15
Вроде правильно описал.
Спасибо!
 

Nemo Cpt.

Ничего нет более постоянного, чем временное.
неужели никто не подскажет?((
 

AnrDaemon

Продвинутый новичок
У вас два действия.
1. Определить, есть ли в корзине скидочная карта.
2. Если есть - пересчитать цены.
А вы всё пытаетесь сделать в одном цикле. Ну не тупо ли?
 

Nemo Cpt.

Ничего нет более постоянного, чем временное.
1. Определить, есть ли в корзине скидочная карта.
2. Если есть - пересчитать цены.
А вы всё пытаетесь сделать в одном цикле. Ну не тупо ли?
Результат получил в рамках одного цикла все-таки...Не знаю, тупо ли это. Но факт в том, что все работает
 

Nemo Cpt.

Ничего нет более постоянного, чем временное.
Может быть не совсем верно, но работает!

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; ?>

/* далее другая часть кода */
 

AnrDaemon

Продвинутый новичок
Вместо "<?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));
      }
    );
И, да, ты сделал именно то, от чего я тебя пытался предостеречь. Вини себя.
 

AnrDaemon

Продвинутый новичок
За то, что ты на каждый пункт корзины повторно сканируешь корзину.
 

Nemo Cpt.

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

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

AnrDaemon

Продвинутый новичок
Это не код, это алгоритм. Разницу понимаешь?

А второго вопроса я вообще не понял.
 

AnrDaemon

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