Конструкция IF

Jon

Новичок
Вечер добрый, подскажите варианты поиска по массиву по нескольким параметрам, у меня их получается 6 и IF довольно много, есть еще варианты поиска?

Вот массив (один элемент)

PHP:
(
            [actions_id] => 6
            [cat_id] => 0
            [podcat_id] => 0
            [brand_id] => 0
            [good_id] => 0
            [pars_cat_id] => 0
            [present_all] => 0
            [present_good_id] => 0
            [date] => 1251633363
            [title] => 50% скидка на доставку Почтой
            [short_story] => при заказе более чем на 3500 руб.
            [image] => 5ykc8h.gif
            [main] => 1
            [goods_look] => 1
            [price_min] => 3500
            [price_max] => 0
            [discount] => 0
        )
Ищу перебором

PHP:
foreach ($this->actions as $id=>$data) {
            
            if ($data['goods_look']==1)
                if ($data['price_min']<=$setting['price'])
                    if ($data['price_max']==0 || $setting['price']<$data['price_max'])
                        if ($data['cat_id']==0 || $data['cat_id']==$setting['cat_id'])
                            if ($data['podcat_id']==0 || $data['podcat_id']==$setting['podcat_id'])
                                if ($data['brand_id']==0 || $data['brand_id']==$setting['brand_id']) {
                                    echo "Отдаем ключ ".$id;                                    
                                }            
            
        }
В массиве $setting непосредственно критерии поиска.
 

Adelf

Administrator
Команда форума
PHP:
foreach ($this->actions as $id=>$data) {
            
            if ( ($data['goods_look']==1)
                 and ($data['price_min']<=$setting['price'])
                    and ($data['price_max']==0 || $setting['price']<$data['price_max'])
                        and ($data['cat_id']==0 || $data['cat_id']==$setting['cat_id'])
                            and ($data['podcat_id']==0 || $data['podcat_id']==$setting['podcat_id'])
                                and  ($data['brand_id']==0 || $data['brand_id']==$setting['brand_id']) ) {
                                    echo "Отдаем ключ ".$id;                                    
                                }            
            
        }
Один if :)
 

Dovg

Продвинутый новичок
Смысл поменяется. Будет одно условие, а не 42.
Потом это условие можно вынести в функцию, которую назвать человеческим языком.
 

Jon

Новичок
Смысл поменяется. Будет одно условие, а не 42.
Потом это условие можно вынести в функцию, которую назвать человеческим языком.
Читал что нету разницы в записи (с точки зрения скорости) и для меня так красивее и понятнее чем куча &&

Может есть другой способ перебрать?
 

baev

‹°°¬•
Команда форума
не хочу для каждого товара отправлять запрос на поиск акций
— Вы считаете, что сможете написать на PHP адекватную замену СУБД?
При том, что СУБД — инструмент, специально «заточенный» под задачи поиска?
 

Jon

Новичок
— Вы считаете, что сможете написать на PHP адекватную замену СУБД?
При том, что СУБД — инструмент, специально «заточенный» под задачи поиска?
Просто скажем если на странице 20 товаров, это лишние 20 запросов к базе, а так массив перебрать и все. Мне кажется так быстрее, но тесты не делал пока.
 

Jon

Новичок
Так зачем 20, если можно одним?
Ну дело в том что привязки Акиция-Товар нету, поэтому приходить искать по параметрам, у каждого товара могут быть свои параметры. Поэтому одним не получиться.

Хотя сейчас как раз и сделал один запрос на вывод всех акций (их всего 15) и перебераю массив.
 

WMix

герр M:)ller
Партнер клуба
на мой взгляд это чистая бизнеслогика, и сократить можно разве чем как успели заметить &&ю никакая БД это не сократит, ибо написанное будет звучать также только на SQL
PHP:
WHERE goods_look ==1 AND 
 price_min <= $setting['price'] AND ...
дальнейшие вопросы сокращения приведут к запутыванию кода, если таких кусков в программе немного с этим можно жить, я достаточно легко читаю!

конечноже если понять как возникла эта логика, или точнее само задание, можно вполне возможно это описать немножко красивее...
 

Jon

Новичок
А что мешает кэшировать результат выборки с учетом вышеперечисленных условий?
Тоже так делал, просто тут момент есть. У акции есть 2 вида отображения, в карточке и в списке, получается нужно создавать 2 файла кэша. И в самой карточке создается (ну если его конечно нет и он еще живой) при заходе в товар, т.е. это запрос. Получаеться
- в общем списке запрос
- в карточке запрос

А способ с массивом всех акций (повторюсь их всего 15) посылает один запрос и все и идет таже выборка, что была бы и в sql (т.е. много &&).
 

Jon

Новичок
И еще, раз уж про кэш заговорил, имеет ли смысл использовать сжатие gzip (скажем gzcompress) если файл максимум весит 10Кб

Не загрузит ли процесс распаковки больше ресурсов, чем просто открыть и прочитать файл такого размера?
 

Beavis

Banned
а зачем 2 файла кеша? ты же в кеше не html хранишь, а только данные
а отображать их можешь любыми способами
 
Сверху