[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Помогите разобраться
freed-master
Следующий код по идее получает переменную sm_id с адресной строки и в зависимости от того какая именно переменная получена присваивает переменным $sm1-$sm6 названия:
PHP
$type_sm = isset($_GET['sm_id'])?$_GET['sm_id']:null;
if (
$type_sm == "sm11") { $sm1 "sm_on"; } else {$sm1 "sm";}
if (
$type_sm == "sm12") { $sm2 "sm_on"; } else {$sm2 "sm";}
if (
$type_sm == "sm13") { $sm3 "sm_on"; } else {$sm3 "sm";}
if (
$type_sm == "sm14") { $sm4 "sm_on"; } else {$sm4 "sm";}
if (
$type_sm == "sm15") { $sm5 "sm_on"; } else {$sm5 "sm";}
if (
$type_sm == "sm16") { $sm6 "sm_on"; } else {$sm6 "sm";}

if (
$type_sm == "sm21") { $sm1 "sm_on"; } else {$sm1 "sm";}
if (
$type_sm == "sm22") { $sm2 "sm_on"; } else {$sm2 "sm";}
if (
$type_sm == "sm23") { $sm3 "sm_on"; } else {$sm3 "sm";}
if (
$type_sm == "sm24") { $sm4 "sm_on"; } else {$sm4 "sm";}
if (
$type_sm == "sm25") { $sm5 "sm_on"; } else {$sm5 "sm";}
if (
$type_sm == "sm26") { $sm6 "sm_on"; } else {$sm6 "sm";}

if (
$type_sm == "sm31") { $sm1 "sm_on"; } else {$sm1 "sm";}
if (
$type_sm == "sm32") { $sm2 "sm_on"; } else {$sm2 "sm";}
if (
$type_sm == "sm33") { $sm3 "sm_on"; } else {$sm3 "sm";}
if (
$type_sm == "sm34") { $sm4 "sm_on"; } else {$sm4 "sm";}
if (
$type_sm == "sm35") { $sm5 "sm_on"; } else {$sm5 "sm";}
if (
$type_sm == "sm36") { $sm6 "sm_on"; } else {$sm6 "sm";}

if (
$type_sm == "sm41") { $sm1 "sm_on"; } else {$sm1 "sm";}
if (
$type_sm == "sm42") { $sm2 "sm_on"; } else {$sm2 "sm";}
if (
$type_sm == "sm43") { $sm3 "sm_on"; } else {$sm3 "sm";}
if (
$type_sm == "sm44") { $sm4 "sm_on"; } else {$sm4 "sm";}
if (
$type_sm == "sm45") { $sm5 "sm_on"; } else {$sm5 "sm";}
if (
$type_sm == "sm56") { $sm6 "sm_on"; } else {$sm6 "sm";}

if (
$type_sm == "sm51") { $sm1 "sm_on"; } else {$sm1 "sm";}
if (
$type_sm == "sm52") { $sm2 "sm_on"; } else {$sm2 "sm";}
if (
$type_sm == "sm53") { $sm3 "sm_on"; } else {$sm3 "sm";}
if (
$type_sm == "sm54") { $sm4 "sm_on"; } else {$sm4 "sm";}
if (
$type_sm == "sm55") { $sm5 "sm_on"; } else {$sm5 "sm";}
if (
$type_sm == "sm56") { $sm6 "sm_on"; } else {$sm6 "sm";}

Но почемуто работают только последние 6 строк, т.е. исходя из полученных значений с sm51 по sm56 переменным присваиваются нужное значение sm_on, а все остальные полученные значения игнорируются и переменным присваивается значение sm

Почему так происходит?

Я в php не силен... пытался сократить этот код, используя операторы: "|", "||", "^", "xor", "or", но тоже ничего не получилось...

Надеюсь понятно изложил суть проблемы



Спустя 7 минут, 48 секунд (1.06.2009 - 20:14) Kuliev написал(а):
freed-master
Что это за индуский код.

Спустя 7 минут, 27 секунд (1.06.2009 - 20:21) jetistyum написал(а):
Да, такой код можно в учебниках публиковать .. в примере того, как не нужно делать smile.gif

смотри в сторону структур управления "switch - case"

Спустя 8 минут, 44 секунды (1.06.2009 - 20:30) Kuliev написал(а):
freed-master
Цитата

Но почемуто работают только последние 6 строк, т.е. исходя из полученных значений с sm51 по sm56 переменным присваиваются нужное значение sm_on, а все остальные полученные значения игнорируются и переменным присваивается значение sm


А почему они должны работать???

Ты же их сам перезаписываешь, вот и получается что у тебя в итоге данные из диапазона
PHP
if ($type_sm == "sm51") { $sm1 "sm_on"; } else {$sm1 "sm";}
if (
$type_sm == "sm52") { $sm2 "sm_on"; } else {$sm2 "sm";}
if (
$type_sm == "sm53") { $sm3 "sm_on"; } else {$sm3 "sm";}
if (
$type_sm == "sm54") { $sm4 "sm_on"; } else {$sm4 "sm";}
if (
$type_sm == "sm55") { $sm5 "sm_on"; } else {$sm5 "sm";}
if (
$type_sm == "sm56") { $sm6 "sm_on"; } else {$sm6 "sm";}


Вот сюда внимательно посмотри, а потом на свой скрипт и подумай... ( чем различаются картинки)
PHP
$sm1 "sm_on"; } else {$sm1 "sm";}
$sm2 "sm_on"; } else {$sm2 "sm";}
$sm3 "sm_on"; } else {$sm3 "sm";}
$sm4 "sm_on"; } else {$sm4 "sm";}
$sm5 "sm_on"; } else {$sm5 "sm";}
$sm6 "sm_on"; } else {$sm6 "sm";}



Спустя 11 минут, 30 секунд (1.06.2009 - 20:41) sergeiss написал(а):
Kuliev - насчет индусского кода ты прав, как никогда biggrin.gif

Мне кажется, будет лучше, если автор озвучит свою идею - что он хотел сделать.
И еще мне кажется, что в данном случае будет лучше (удобнее, да и "красивее") использовать ассоциативные массивы.


Спустя 6 минут, 10 секунд (1.06.2009 - 20:48) Kuliev написал(а):
sergeiss
Если честно, то я непонял для чего ему такая конструкция и что она должна делать, но код весьма забавный (не поленился скопипастить) huh.gif

Спустя 17 минут, 39 секунд (1.06.2009 - 21:05) sergeiss написал(а):
Цитата (Kuliev @ 1.06.2009 - 21:48)
Если честно, то я непонял для чего ему такая конструкция...

Скорее всего, где-то в форме возможен выбор одного из 5 блоков данных. А уже там 6 выборов. Вот он и пытается отловить... Индусскими Какими-то способами smile.gif

Спустя 43 минуты, 2 секунды (1.06.2009 - 21:48) freed-master написал(а):
Цитата
Скорее всего, где-то в форме возможен выбор одного из 5 блоков данных. А уже там 6 выборов.
Почти так. Только не в форме, а... короче пытаюсь сделать меню (трехуровневое).

Есть 5 основных разделов, каждый из которых содержит по 6 подразделов, каждый подраздел, в свою очередь, содержит еще ссылки.

Цитата
Если честно, то я непонял для чего ему такая конструкция...

А вся эта байда нужна для того что бы путем замены стиля (фона кнопки) показать пользователю в каком разделе какого подраздела он находится.

Меню первого уровня (главные разделы) я поступил так же:
Код
$type_m = isset($_GET['m_id'])?$_GET['m_id']:null;

if ($type_m == "m1") { $m1 = "menu_on"; } else {$m1 = "menu";}
if ($type_m == "m2") { $m2 = "menu_on"; } else {$m2 = "menu";}
if ($type_m == "m3") { $m3 = "menu_on"; } else {$m3 = "menu";}
if ($type_m == "m4") { $m4 = "menu_on"; } else {$m4 = "menu";}
if ($type_m == "m5") { $m5 = "menu_on"; } else {$m5 = "menu";}

Все хорошо работает. А вот со вторым уровнем никак не разбирусь.
Цитата
смотри в сторону структур управления "switch - case"

Посмотрел, но как применить к моему горе-меню не въехал.

Что-то типа того?:
Код
switch($sm_id)
{
   case sm11: case sm21: case sm31: case sm41: case sm51: case sm61: $sm1 = "menu_on";
   break;
   default: $sm1 = "menu";
}

Спустя 1 час, 1 минута, 18 секунд (1.06.2009 - 22:50) freed-master написал(а):
Кажется разобрался, сделал так:
PHP
switch($type_sm)
{
case 
"sm11": case "sm21": case "sm31": case "sm41": case "sm51"$sm1 "sm_on"; break; 
default: 
$sm1 "sm"
}
switch(
$type_sm)
{
case 
"sm12": case "sm22": case "sm32": case "sm42": case "sm52"$sm2 "sm_on"; break;
default: 
$sm2 "sm";
}
switch(
$type_sm)
{
case 
"sm13": case "sm23": case "sm33": case "sm43": case "sm53"$sm3 "sm_on"; break;
default: 
$sm3 "sm";
}
switch(
$type_sm)
{    
case 
"sm14": case "sm24": case "sm34": case "sm44": case "sm54"$sm4 "sm_on"; break;
default: 
$sm4 "sm";
}
switch(
$type_sm)
{
case 
"sm15": case "sm25": case "sm35": case "sm45": case "sm55"$sm5 "sm_on"; break;
default: 
$sm5 "sm";
}
switch(
$type_sm)
{
case 
"sm16": case "sm26": case "sm36": case "sm46": case "sm56"$sm6 "sm_on"; break;
default: 
$sm6 "sm";
}


 ! 

М
Оформляй код согласно правилам форума!
Kuliev



Спустя 5 минут, 58 секунд (1.06.2009 - 22:56) Alchemist написал(а):
аф-фи-геть !

Спустя 5 минут, 45 секунд (1.06.2009 - 23:01) freed-master написал(а):
Цитата
аф-фи-геть !
В смысле? опять набокапорил? или это в общем? smile.gif

Спустя 20 минут, 44 секунды (1.06.2009 - 23:22) Alchemist написал(а):
это было в общем... держи:
PHP
$sm1 $sm2 $sm3 $sm4 $sm5 $sm6 'sm';
if (
preg_match('/^sm\d{2}$/',$type_sm))
    ${
'sm'.$type_sm[3]} = 'sm_on';

Спустя 26 минут, 1 секунда (1.06.2009 - 23:48) freed-master написал(а):
Спасибо!!!

Спустя 1 день, 18 часов, 38 минут, 20 секунд (3.06.2009 - 18:26) freed-master написал(а):
Чуть подумал кое-что убрал и... вобщем изменил имена получаемых гэтом переменных. Теперь они выглядят не так: "sm11" а так "11" - просто числа. Соответственно необходимо что-то изменить здесь:
PHP
$sm1 $sm2 $sm3 $sm4 $sm5 $sm6 'sm';
if (
preg_match('/^sm\d{2}$/',$type_sm))
    ${
'sm'.$type_sm[3]} = 'sm_on';

Но мне здесь не все понятно.

В первой строке вроде все ясно, во второй и третей понятен только смысл - считывает с урл-а значение переменной $type_sm и отделяет 2 цифры после sm, но как подробно (дословно) расшифровать запись '/^sm\d{2}$/' ? дополните и поправтье пожалуйста:
'/ - кавычки
^ - ? (кажется это "или"?)
sm\ - смотрит после sm
d{2} - считывает 2 символа (а почему d - типа double?)
$ - ?
/' - кавычки

Спустя 10 минут, 19 секунд (3.06.2009 - 18:37) twin написал(а):
'/ - кавычки ограничитель маски
^ - ? (кажется это "или"?) не, либо привязка к началу строки
sm\ - смотрит после sm просто sm
d{2} - считывает 2 символа (а почему d - типа double?) \d{2) любые 2 цифры
$ - ? привязка к концу строки
/' - кавычки ограничитель маски

Спустя 6 минут, 9 секунд (3.06.2009 - 18:43) freed-master написал(а):
А что значит тройка в третей строке: $type_sm[3]

Спустя 2 минуты, 8 секунд (3.06.2009 - 18:45) twin написал(а):
Вот тут всё написано

Спустя 31 минута, 16 секунд (3.06.2009 - 19:16) freed-master написал(а):
Получается нужно только убрать пару символов:
PHP
$sm1 $sm2 $sm3 $sm4 $sm5 $sm6 'sm';
if (
preg_match('/d{2}$/',$type_sm))
${
$type_sm[3]} = 'sm_on';
Но нет...

Спустя 40 минут, 35 секунд (3.06.2009 - 19:57) glock18 написал(а):
^ - ? (кажется это "или"?) не, либо привязка к началу строки
я бы сказал - здесь привязка к началу строки. чего человека грузить))

freed-master
почитай про регулярные выражения лучше. это базовый синтаксис.

Спустя 16 минут, 54 секунды (3.06.2009 - 20:14) twin написал(а):
Ди ни божеж мой. Если в именах одни цифры, не нужна там регулярка. и функция эта не нужна. Вот где загрузка. А это пусть бы знал...

Спустя 26 минут, 26 секунд (3.06.2009 - 20:40) freed-master написал(а):
На звание программиста я не притендую, подскажите пожалуйста как сократить этот код:
PHP
switch($type_sm)
{
case 
"11": case "21": case "31": case "41": case "51"$sm1 "sm_on"; break; 
default: 
$sm1 "sm"
}
switch(
$type_sm)
{
case 
"12": case "22": case "32": case "42": case "52"$sm2 "sm_on"; break;
default: 
$sm2 "sm";
}
switch(
$type_sm)
{
case 
"13": case "23": case "33": case "43": case "53"$sm3 "sm_on"; break;
default: 
$sm3 "sm";
}
switch(
$type_sm)
{    
case 
"14": case "24": case "34": case "44": case "54"$sm4 "sm_on"; break;
default: 
$sm4 "sm";
}
switch(
$type_sm)
{
case 
"15": case "25": case "35": case "45": case "55"$sm5 "sm_on"; break;
default: 
$sm5 "sm";
}
switch(
$type_sm)
{
case 
"16": case "26": case "36": case "46": case "56"$sm6 "sm_on"; break;
default: 
$sm6 "sm";
}

Спустя 8 минут, 40 секунд (3.06.2009 - 20:49) twin написал(а):
Ну ведь написали уже код, куда ж короче... smile.gif
Просто если ты решил одни цифры в названиях оставить, то и нафиг тебе регулярка теперь:
PHP
$sm1 $sm2 $sm3 $sm4 $sm5 $sm6 'sm';
    ${
'sm'.(int)$type_sm} = 'sm_on';

Спустя 6 минут, 5 секунд (3.06.2009 - 20:55) freed-master написал(а):
Что-то не хочет он ничего менять...

Спустя 5 минут, 20 секунд (3.06.2009 - 21:00) twin написал(а):
Ну ёпрст. Чуть чуть фантазии:
PHP
$sm1 $sm2 $sm3 $sm4 $sm5 $sm6 'sm';
$type_sm substr($type_sm,1);
    ${
'sm'.(int)$type_sm} = 'sm_on';


_____________
Всем, кто заинтересован, могу помочь начать зарабатывать на forex.
Пишите в личку или на e-mail: flash-dirt@yandex.ru
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.