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

Тема в разделе "Регулярные выражения", создана пользователем domian, 4 дек 2008.

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

    domian Постоялец

    Регистр.:
    1 авг 2007
    Сообщения:
    70
    Симпатии:
    5
    Имеется вот такой CASE. Собственно, скрипт получает собщение содержащее параметр "пицца", и что-то делает.
    PHP:
    case 'пицца'
             { 
            
    действия по этому параметру     
         
             

            break;
    Мне нужен такой же блок который бы обрабатывал все запросы начинающиеся со слова "пицца", предположим - пицца #название_пиццы #адрес доставки.

    Знаю что с помощью регулярных выражений делается, но не могу подобрать, постоянно ругается на что-либо. помогите :(
     
  2. serg_g

    serg_g Создатель

    Регистр.:
    31 окт 2008
    Сообщения:
    35
    Симпатии:
    9
    если я правильно понял, то так

    PHP:
    switch (preg_match('/^пицца\s/',$str)) {
    case 
    :
        echo 
    "нет пиццы<br><br>";
        break;
    case 
    1:
        echo 
    " есть пицца<br><br>";
        break;
    }
     
  3. domian

    domian Постоялец

    Регистр.:
    1 авг 2007
    Сообщения:
    70
    Симпатии:
    5
    есть условие CASE 'пицца'
    а мне нужны условия CASE типа 'пицца #название_пиццы #адрес доставки #фамилия'
    и скрипт выполняет то что я ему заложил в тело CASE
    #название_пиццы #адрес доставки #фамилия - будут менятся
     
  4. RolCom

    RolCom

    Регистр.:
    12 мар 2008
    Сообщения:
    351
    Симпатии:
    108
    Так надо выдрать из строки #название_пиццы #адрес доставки #фамилия, или всеже конструкции case проверить, начинается ли строка с определенного слова? Если второе, то:
    PHP:
    switch (true) { 
    case 
    preg_match('/^пицца\b/',$str) : 
        echo 
    "пица"
        break; 
    case 
    preg_match('/^шаурма\b/',$str) : 
        echo 
    "шаурма"
        break; 

     
  5. domian

    domian Постоялец

    Регистр.:
    1 авг 2007
    Сообщения:
    70
    Симпатии:
    5
    Вот приблизительный код который есть сейчас
    PHP:
    switch($req
         {    
    case 
    'пицца'
                { 
                echo(
    'пицца'); 
               } 
            break;
    default:
    {
    echo(
    'привет');
    }
    break;
    }
    Мне нужно построить еще один CASE чтобы он обрабатывал все запросы начинающиеся со слов "пицца" и что-то с этими запросами я сам мог делать, к примеру выводить в echo().
    То есть для примера запросы:
    пицца белая ул. Карла-Маркса 14 4 Валентин Смирнов
    пицца помидорная ул. Советская 90 Евгений Новиков
     
  6. judgefog

    judgefog

    Регистр.:
    12 авг 2006
    Сообщения:
    487
    Симпатии:
    335
    case можно делать вложенными
    сначала убедились что это пицца а не хотдог, потом следующее слово.

    Но что-то мне подсказывает что задача изначально не верна
    Заказы надеюсь в базе хранятся?
     
  7. RolCom

    RolCom

    Регистр.:
    12 мар 2008
    Сообщения:
    351
    Симпатии:
    108
    Тогда поставь в switch выражение true, и проверяй в case как в моем примере.
    Впрочем, если задача состоит в том, чтобы написать как можно меньше строчек кода, можно добавить примерно такой case (preg_match('/^пицца\b/',$req)?$req:$req.'!')
     
  8. domian

    domian Постоялец

    Регистр.:
    1 авг 2007
    Сообщения:
    70
    Симпатии:
    5
    Заказы нигде не хранятся, они через прикрученного ICQ бота на классе destym отправляются администратору.

    Добавлено через 59 минут
    получается что при запросе просто "пицца" - он выводит "Прайс пиццерии"

    PHP:
    case 'пицца'
               { 
                echo(
    'Прайс пиццерии'); 
              } 
            break;

    case (
    preg_match('/^пицца\b/',$req)?$req:$req.'!'):
         {
         echo(
    'Заявка на '.$req.'принята.');
         }
         break;
    А при запросе "пицца белая ул. Карла-Маркса 14 4 Валентин Смирнов"
    он вываливается в ответ по условию default :confused:
     
  9. koroliov

    koroliov Создатель

    Регистр.:
    4 июн 2007
    Сообщения:
    27
    Симпатии:
    4
    Я так и не понял, нужно проверить на наличие слова "пицца", или нужно разобрать строку "пицца белая ул. Карла-Маркса 14 4 Валентин Смирнов" и выделить из нее улицу и фамилию?

    Если первое, то уже привели выше, если второе, то можно сделать например так:

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

    preg_match('/^(пицца\s(?:\w*))\s(.*)/'$req$matches);

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

    domian Постоялец

    Регистр.:
    1 авг 2007
    Сообщения:
    70
    Симпатии:
    5
    нужно при запросе слова пицца чтобы выодился предположим прайс-лист этих пицц,
    а при запросе по подобию: пицца белая ул. Карла-Маркса 14 4 Валентин Смирнов, где к слову пицца добавляются еще параметры #название_пиццы #адрес доставки #фамилия выводилось echo() предположим "Заявка принята " и служебные отметки, которые я задаю

    Текущая структура обрабатывает запросы и с параметрами(фамилии и адреса) и без, но при запросе с параметром скрипт отдает default для свитча, а никак не то что я прописал в
    PHP:
    case (preg_match('/^пицца\b/',$req)?$req:$req.'!'): 
         { 
         echo(
    'Заявка на '.$req.'принята.'); 
         } 
         break; 
     
Статус темы:
Закрыта.