Написание функции

Тема в разделе "PHP", создана пользователем sidor, 20 май 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. sidor

    sidor

    Регистр.:
    7 июн 2006
    Сообщения:
    220
    Симпатии:
    14
    Есть несколько подобных проверок вида:
    PHP:
    if($goods_info['category'] == or $goods_info['category'] == or $goods_info['category'] == or $goods_info['category'] == or $goods_info['category'] == 10 or $goods_info['category'] == 11 or $goods_info['category'] == 25 or $goods_info['category'] == 43 or $goods_info['category'] == 44 or $goods_info['category'] == 45 or $goods_info['category'] == 55 or $goods_info['category'] == 56 or $goods_info['category'] == 57 or $goods_info['category'] == 59 or $goods_info['category'] == 61 or $goods_info['category'] == 62 or $goods_info['category'] == 108) { $tpl->load_template 'shop/full_accessory.tpl' );}
    Причем количество сравнений может быть как 3 так и 10.

    Подскажите пожалуйста каким образом написать функцию, которая бы выполняла подобную вещь, но с динамическим кол-вом параметров?
    например там tmp(35,22,11,09,'shop/full_accessory.tpl'); или что-то подобное? что бы просто на входе задавать группы как параметры.
     
  2. tostrss

    tostrss

    Регистр.:
    16 окт 2007
    Сообщения:
    771
    Симпатии:
    217
    $array[] = 3;
    $array[] = 5;
    $array[] = 7;
    ...
    in_array($goods_info['category'], $array);
     
  3. Miraage

    Miraage Angular/Laravel

    Регистр.:
    3 июн 2008
    Сообщения:
    230
    Симпатии:
    51
    если я тебя правильно понял, то так
    PHP:
    <?php
    $array 
    = array(
     
    #Массив с допустимыми значениями твоих переменных :/
    );
    function 
    tmp()
    {
    global 
    $tpl$array;
    $args func_get_args(); # Получаем все аргументы
    $template array_pop$args );  # Отщепляем последний элемент ( т.е. шаблон )
    $dismatch 0# кол-во несовпадений
    foreach ( $args as $v )
    {
        if ( ! 
    in_array$v$array )) $dismatch 1;
    }
    if ( 
    $dismatch == )
         
    $tpl->load_template$template );
         return 
    true;
    }
    else
    {
         echo 
    '>> error msg <<';
         return;
    }
    ?>
     
    sidor нравится это.
  4. wwwitalya

    wwwitalya Создатель

    Регистр.:
    4 май 2009
    Сообщения:
    45
    Симпатии:
    18
    PHP:
    if (in_array($goods_info['category'], array(1,3,7,9))) {$tpl->load_template 'shop/full_accessory.tpl' );}
     
  5. agent_smit

    agent_smit Постоялец

    Регистр.:
    12 дек 2008
    Сообщения:
    60
    Симпатии:
    11
    А может стоить БД подключить к выборке? Думаю универсальней будет.
     
    sidor нравится это.
  6. liquinoid

    liquinoid Создатель

    Регистр.:
    23 апр 2009
    Сообщения:
    24
    Симпатии:
    0
    БД и универсальность это не совсем синонимы :)
     
  7. agent_smit

    agent_smit Постоялец

    Регистр.:
    12 дек 2008
    Сообщения:
    60
    Симпатии:
    11
    Как раз хранить многие данные в БД и потом если надо что-то изменить, то изменить данные в БД, а не лесть в код, то это универсальность.
    А ТС надо при определенных ID-шниках инклудить файл, то почему б это реализовать с помощью БД. (надо читать все посты)
     
  8. seodor

    seodor Создатель

    Регистр.:
    9 фев 2009
    Сообщения:
    10
    Симпатии:
    1
    Поддерживаю по поводу базы данных
     
  9. sidor

    sidor

    Регистр.:
    7 июн 2006
    Сообщения:
    220
    Симпатии:
    14
    вообщем, поскольку эти все категории нужно было добавлять, удалять с админки, то я сделал таблицу новую shop_settings и поле к примеру apple_goods.
    Запись в поле происходит в строку в виде цифр через запятую.
    В том месте, где нужно было написать:
    PHP:
    f($goods_info['category'] == or $goods_info['category'] == or $goods_info['category'] == or $goods_info['category'] == or $goods_info['category'] == 10 or $goods_info['category'] == 11 or $goods_info['category'] == 25 or $goods_info['category'] == 43 or $goods_info['category'] == 44 or $goods_info['category'] == 45 or $goods_info['category'] == 55 or $goods_info['category'] == 56 or $goods_info['category'] == 57 or $goods_info['category'] == 59 or $goods_info['category'] == 61 or $goods_info['category'] == 62 or $goods_info['category'] == 108) { $tpl->load_template 'shop/full_accessory.tpl' );} 
    я сделал так:
    PHP:
    $goods_label $db->super_query "SELECT apple_goods FROM " PREFIX "_shop_settings" );
    $apple_goods explode(','$goods_label['apple_goods']);
    foreach(
    $apple_goods as $x)
    { if(
    $goods_info['category'] == $x$s_navigation .= " › " "Продукция Apple" " › " $goods_info['title']; }
    Если есть какие-то замечания по упрощению кода - только приветствуются.
     
  10. agent_smit

    agent_smit Постоялец

    Регистр.:
    12 дек 2008
    Сообщения:
    60
    Симпатии:
    11
    Может стоит вместо поля создать табличку, где будут id-шники перечислены и запрос на принадлежность $goods_info['category'] к категории полегче будет (1,2,3 форма нормализации БД)
     
Статус темы:
Закрыта.