дополнительные параметры в CASE

Статус
В этой теме нельзя размещать новые ответы.
Наверно ты что-то не так делаешь, у меня все работает.
PHP:
<?php
$req="пицца белая ул. Карла-Маркса 14 4 Валентин Смирнов";
switch($req) {
case 'пицца':  
           {  
            echo('Прайс пиццерии');  
          }  
        break; 

case (preg_match('/^пицца\b/i',$req)?$req:!$req): 
     { 
     echo('Заявка на '.$req.' принята.'); 
     } 
     break;     
default:
	echo "дефолт";		
break;
}
?>
Если дело в регистре слова пицца, добавь i как в этом примере.
 
Нет, это примерный вид запроса, в 5 сообщении в теме я указывал об этом. Немного не то что нужно.
Хотя и при отправке в дефолтное сообщение тоже можно придумать что-нибудь. Но удобней было бы чтобы подобные запросы обрабатывал именно CASE
 
Код приведенный RolCom, полностью рабочий. Может у тебя запрос, например в UTF-8 выдается? Какая у него кодировка?
 
cp1251.
Не нужно мне сравнение с Валентином Смирновым. Это я для примера привел. Запрос может быть абсолютно любой, но начинающийся непременно со слова пицца, то есть получается что нужно обработать все символы после слова пицца и
1) если их нет,то выводится предположим мой прайс,
2) если они есть, то выдать что-либо еще
 
Ну можно так еще:

PHP:
<?php
$req="пицца белая ул. Карла-Маркса 14 4 Валентин Смирнов";

switch(preg_match('/^пицца\s(.*)/i', trim($req), $matches)) {
    case 0:
        echo('Прайс пиццерии');
        break;
    case 1:
        echo('Заявка на '.$matches[0].' принята.');
        break;
}
?>
 
Не то что нужно. Может я как-то не понятно описываю суть проблемы?

Вот моя половина
PHP:
case 'пицца': 
        {
			switch($req)
			 { 
					case 'пицца':   
          				 {   
          					  say($from,'Прайс пиццерии');   
    				      }   
        				break;  
					case (preg_match('/^пицца\s\w',$req)):  
     					{  
     						say($from,'Заявка на '.$req.' принята.'); 
							say(ADMIN,'Заказ пиццы: '. $req.' запросил номер:'.$from); 
     					}  
    					 break;      
						default: 
							echo "дефолт";         
						break; 
			}
При запросе "пицца" - он отрабатывает как следует.
Как сделать чтобы при запросе по шаблону
"название_пиццы адрес доставки фамилия"
он правильно разбирал все слова следующие после "пицца"
и выводил их в мою функцию
PHP:
case (preg_match('/^пицца\s\w',$req)):  
     					{  
     						say($from,'Заявка на '.$req.' принята.'); 
							say(ADMIN,'Заказ пиццы: '. $req.' запросил номер:'.$from); 
     					}
 
Не обязательно preg_match() ставить в case – достаточно в switch. Результат поиска находится в третьем параметре preg_match() - в моем случае $matches.

Не то что нужно. Может я как-то не понятно описываю суть проблемы?

Не было внятно произнесено, что нужно именно разобрать строку, а не только сделать проверку.

Как сделать чтобы при запросе по шаблону
"название_пиццы адрес доставки фамилия"
он правильно разбирал все слова следующие после "пицца"
и выводил их в мою функцию

Это все равно общие слова. Нужно ли, разделять имя и фамилию, номер дома и номер квартиры или не нужно и т.д. и т.п. (или там вообще другие данные будут) – от этого зависит паттерн. Ведь вполне все это можно сделать и с помощью explode(), если делить все слова, или же с помощью preg_split().

Ну, вот навскидку четыре примера (не идеальные, а просто для иллюстрации), $matches содержит массив с результатами поиска:

PHP:
$text = "пицца белая ул. Карла-Маркса 14 4 Валентин Смирнов";

preg_match('/^(пицца\s(?:\w*))\s(.*)\s(\d*)\s(\d*)\s(\w*)\s(\w*)/i', trim($text), $matches);

/*$matches = array
      0 => string 'пицца белая ул. Карла-Маркса 14 4 Валентин Смирнов'
      1 => string 'пицца белая'
      2 => string 'ул. Карла-Маркса'
      3 => string '14'
      4 => string '4'
      5 => string 'Валентин'
      6 => string 'Смирнов'*/

preg_match('/^(пицца\s(?:\w*))\s(.*)\s(\d*)\s(\d*)\s((?:\w*)\s(?:\w*))/i', trim($text), $matches);

/*$matches = array
      0 => string 'пицца белая ул. Карла-Маркса 14 4 Валентин Смирнов'
      1 => string 'пицца белая'
      2 => string 'ул. Карла-Маркса'
      3 => string '14'
      4 => string '4'
      5 => string 'Валентин Смирнов' - имя и фамилия вместе*/

preg_match('/^(пицца\s(?:\w*))\s(?:\w{2}\.)\s(.*)\s(\d*)\s(\d*)\s(\w*)\s(\w*)/i', trim($text), $matches);

/*$matches = array
      0 => string 'пицца белая ул. Карла-Маркса 14 4 Валентин Смирнов'
      1 => string 'пицца белая'
      2 => string 'Карла-Маркса' - вырезали "ул."
      3 => string '14'
      4 => string '4'
      5 => string 'Валентин'
      6 => string 'Смирнов'*/

$result = explode(" ", $text);

/*$result = array
      0 => string 'пицца'
      1 => string 'белая'
      2 => string 'ул.'
      3 => string 'Карла-Маркса'
      4 => string '14'
      5 => string '4'
      6 => string 'Валентин'
      7 => string 'Смирнов'*/
 
С этим более-менее понятно.
А что будет происходить при других запросах, к примеру "информация", "помощь", "как заказать"?
Также есть сообщение выводимое по-умолчанию, которое описывает все допустимые команды.
Для них в теле главной функции писать другой switch, который бы обрабатывал их?
 
А не легче ли каждому типу запроса присвоить id. Заказы, каким образом делаются?
 
схема такая? человек пишет привет - ему в ответ собщение по умолчанию, в котором содержится помощь по всем командам.
Там есть команды
информация
помощь
пицца
как связаться

вот весь код исполняемого скрипта
PHP:
<? 
function icq($from,$req) 
    { 
    	
	switch($req) 
     {
	

switch(preg_match('/^(пицца\s(?:\w*))\s(?:\w{2}\.)\s(.*)\s(\d*)\s(\d*)\s(\w*)\s(\w*)/i', trim($text), $matches);) 
   						  {
	

							case 'пицца': 
									{
										say($from,'Прайс пиццерии'); 
										say($from,'Заявка на '.$req.'С номера '.$from. 'принята.');
										say(ADMIN,'интерес про пиццу: '. $result1[0].' запросил номер: '.$from);  
									}   
									break;	
	   
         case 'время': 
            { 
			$tim1 = date("H");
			$tim2 = date("i");
			$tim3 = date("s");
            say($from,'Текущее время: '. $tim1.':'. $tim2.':'. $tim3); 
            } 
        break;
	
case 'помощь': 
            { 
			
            say($from,'Помощь по командам '); 
            } 
        break;


case 'как связаться': 
            { 
			
            say($from,'Наш адрес:
Наш телефон'); 
            } 
        break;
		 

        default: 
            { 
            say($from, ‘Справочник команд:
информация
помощь
пицца 
как связаться
время
-----------------------------'); 
         say(ADMIN,'Лог запросов: '. $req.' запросил номер: '.$from); 
		    } 
        break; 
        } 
    } 
?>

Он обрабатывает все команды:
информация
помощь
пицца
как связаться
время

когда запросы идут одним словом. Нужно только добавлять слова к "пицца", чтобы тем самым указывать адрес название пиццы и прочие параметры для заказа через скрипт
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху