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

Статус
В этой теме нельзя размещать новые ответы.

sidor

Старатель
Регистрация
7 Июн 2006
Сообщения
220
Реакции
14
Есть несколько подобных проверок вида:
PHP:
if($goods_info['category'] == 3 or $goods_info['category'] == 6 or $goods_info['category'] == 7 or $goods_info['category'] == 9 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'); или что-то подобное? что бы просто на входе задавать группы как параметры.
 
$array[] = 3;
$array[] = 5;
$array[] = 7;
...
in_array($goods_info['category'], $array);
 
если я тебя правильно понял, то так
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 == 0 )
     $tpl->load_template( $template );
     return true;
}
else
{
     echo '>> error msg <<';
     return;
}
?>
 
PHP:
if (in_array($goods_info['category'], array(1,3,7,9))) {$tpl->load_template ( 'shop/full_accessory.tpl' );}
 
А может стоить БД подключить к выборке? Думаю универсальней будет.
 
БД и универсальность это не совсем синонимы :)
 
БД и универсальность это не совсем синонимы :)
Как раз хранить многие данные в БД и потом если надо что-то изменить, то изменить данные в БД, а не лесть в код, то это универсальность.
А ТС надо при определенных ID-шниках инклудить файл, то почему б это реализовать с помощью БД. (надо читать все посты)
 
Поддерживаю по поводу базы данных
 
вообщем, поскольку эти все категории нужно было добавлять, удалять с админки, то я сделал таблицу новую shop_settings и поле к примеру apple_goods.
Запись в поле происходит в строку в виде цифр через запятую.
В том месте, где нужно было написать:
PHP:
f($goods_info['category'] == 3 or $goods_info['category'] == 6 or $goods_info['category'] == 7 or $goods_info['category'] == 9 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']; }

Если есть какие-то замечания по упрощению кода - только приветствуются.
 
вообщем, поскольку эти все категории нужно было добавлять, удалять с админки, то я сделал таблицу новую shop_settings и поле к примеру apple_goods.
Запись в поле происходит в строку в виде цифр через запятую.
В том месте, где нужно было написать:
PHP:
f($goods_info['category'] == 3 or $goods_info['category'] == 6 or $goods_info['category'] == 7 or $goods_info['category'] == 9 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']; }
Если есть какие-то замечания по упрощению кода - только приветствуются.
Может стоит вместо поля создать табличку, где будут id-шники перечислены и запрос на принадлежность $goods_info['category'] к категории полегче будет (1,2,3 форма нормализации БД)
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху