Проблема со switch

e1

Новичок
Проблема со switch

Здравствуйте!

Имеется небольшая конструкция на switch:
PHP:
$url = parse_url($_SERVER["REQUEST_URI"]);

switch($url[path])
	{
case preg_match("/link1/",$url[path]): echo "link1";
break;
case preg_match("/link2/",$url[path]): echo "link2";
break;
case preg_match("/link3/",$url[path]): echo "link3";
break;
	}
Смысл её такой, что если посетитель находится по адресу содержашему link1, то ему должно высветиться соответствующее сообщение.

Проблема в следующем: если я захожу по адресу link1, то мне высвечивается сообщение link2, если на link2 и link3, то сообщение link1. Не могу понять почему.

Заранее спасибо.
 

Popoff

popoff.donetsk.ua
Re: Проблема со switch

Попробуй написать так:

PHP:
$url = parse_url($_SERVER["REQUEST_URI"]); 

if(strpos($url['path'],"link1")!==false)
  echo "link1"; 
elseif(strpos($url['path'],"link2")!==false)
  echo "link2"; 
elseif(strpos($url['path'],"link3")!==false)
  echo "link3";
 

Фанат

oncle terrible
Команда форума
на будущее, почитай очень полезный текстик: [f]debug[/f], часть вторая.
у тебя не работает не кейс, а скорее прег_матч.
вот и надо концентрироваться на конкретном месте, где не работает, а не на здоровом куске программы.

В этом и заключается работа программиста.
ты уверен, что на вход в прег_матч приходит то, что надо?
А уверен, что оно работает, как надо?

Что логичнее - спрашивать целиком про кусок кода "не работает", или про конкретную проблему?
что логичнее - находясь в Москве спрашивать "как мне проехать в Москву?" или все-таки, спрашивать точный адрес?

-~{}~ 28.03.04 11:53:

стоп.
тут вообще бред написан.
вот что значит, никогда не пользуюсь кейсом.
e1 тебе надо бы почитать документацию на этот неудобный оператор, если уж ты взялся его использовать.
В этом смысле твой собрат новичок попофф тебя понял. Ты используешь свитч так, как будто навесил его на код, который раньше состоял из иф-ов.

А по мне - так лучше всего массив.
 

Фанат

oncle terrible
Команда форума
Ты используешь свитч так, как будто навесил его на код, который раньше состоял из иф-ов.
подсказка:
условие в свитче - только одно.
а у тебя - в каждой строчке.
 

si

Administrator
подсказка:
условие в свитче - только одно.
а у тебя - в каждой строчке.
PHP:
<?
	$var = 1;
	
	switch($var)
	{
		case $var>0:
			echo "\$var>0\n";
			
		case 1:
			echo "1\n";
			
		case ($var+1)==2:
			echo "(\$var+1)=2\n";
			
	}
?>
[output]
$var>0
1
($var+1)=2
[/output]

другой вопрос надо ли так писать ...
 

korvin0

моська
Вообще конечно по еврейски написано (просьба евреям не обижаться), но раз уж ты так уж хочешь юзать switch, то измени switch($url[path]) на switch(true) и радуйся :)
 
Сверху