За последние 24 часа нас посетил 18071 программист и 1590 роботов. Сейчас ищут 1240 программистов ...

Нестандартный случай с регуляркой - нужна ваша помощь.

Тема в разделе "Регулярные выражения", создана пользователем realtyhochu, 26 ноя 2012.

  1. realtyhochu

    realtyhochu Активный пользователь

    С нами с:
    26 ноя 2012
    Сообщения:
    3
    Симпатии:
    0
    Добрый день уважаемые форумчане. Помогите пожалуйста новичку с реализацией вывода слов в зависимости от символов, которые содержатся в переменной.
    Требуется написать php условие с регуляркой.
    Пример.
    Выводится переменная из базы данных $hotel. Допустим значение переменной равно $hotel = "Crowne Plaza Darwin 5*"; Требуется условие, что если на конце отеля стоит "5*" в выводимом тексте на странице вида ( $hotel . " " .$a ) переменная $a заменялась на слово "пять звезд", если на конце стоит "4*", то переменная $a заменялась на слово "четыре звезды", если "3*" то "три звезды", если "2*" то "две звезды", если "1*" то "одна звезда".
    Тогда в данном примере строчка будет иметь вид "Crowne Plaza Darwin 5* пять звезд ". То есть значение слова в переменной $a зависело от звездности отеля, выводимого в таком виде "5*" на конце названия каждого отеля.
    Помогите пожалуйста, если не сложно. Очень требуется для работы - просто горю. Заранее спасибо вам всем за ответы. Удачи всем.
    С уважением к вам, Денис
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    можно без регулярки... =) я просто плохо знаю регулярки.
    Код (PHP):
    1. $h = "Crowne Plaza Darwin 5*";
    2. $replace = array(
    3.     '1*' => '*1 Одна звезда',
    4.     '2*' => '*2 Две звезды',
    5.     '3*' => '*3 Три звезды',
    6.     '4*' => '*4 Четыре звезды',
    7.     '5*' => '*5 Пять звезд'
    8.     );
    9. echo str_replace(array_keys($replace), $replace, $h); 
     
  3. realtyhochu

    realtyhochu Активный пользователь

    С нами с:
    26 ноя 2012
    Сообщения:
    3
    Симпатии:
    0
    спасибо вам большое igordata
    сейчас правда выводится в таком виде "Crowne Plaza Darwin *5 Пять звезд"

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

    Например для получения предложения вида:
    Отель Crowne Plaza Darwin *5 находится рядом с морем. У него пять звезд.

    Спасибо вам большое что откликнулись и удачи.
     
  4. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    дык такое задание было =)
    я регулярки не знаю. я бы тут регулярку сделал бы.

    Добавлено спустя 8 минут 45 секунд:
    Код (PHP):
    1. $replace = array(
    2.     '1' => 'Одна звезда',
    3.     '2' => 'Две звезды',
    4.     '3' => 'Три звезды',
    5.     '4' => 'Четыре звезды',
    6.     '5' => 'Пять звезд'
    7. );
    8. $h = "Crowne Plaza Darwin 5*";
    9. $matches = array();
    10. if (preg_match('/(\d+)\*/', $h, $matches)) {
    11.   echo $h . ' ' . $replace[$matches[1]];
    12. } 
     
  5. realtyhochu

    realtyhochu Активный пользователь

    С нами с:
    26 ноя 2012
    Сообщения:
    3
    Симпатии:
    0
    Огромное спасибо igordata дружище. Классно получилось - а говоришь регулярки не знаешь. скромничаешь )
     
  6. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    =) ну дык девять минут почти убил, пример пришлось глянуть. Я это за знание не считаю :D
    сложную регулярку вобще не напишу. не знаю. не идут они у меня.