Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> замена preg_replace_callback 
V
    Опции темы
gta4kv
Дата 15.5.2009, 22:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Walking around mad.
***


Профиль
Группа: Завсегдатай
Сообщений: 1868
Регистрация: 25.7.2006

Репутация: 21
Всего: 91



задача — сделать парсер для if'oв в шаблоне. 

реализовал не очень удачно(?) : 

Код

    private function parse_if()
    {
     $this->template_content = preg_replace_callback
         ( 
             '%{if ([a-z]+)=([a-z]+)}(.*?){/if}%siU',
             create_function
             ( 
                 '$matches',
                 'return singleton::getInstance( "template" )->process_if($matches);'    
             ),
             $this->template_content
         );

    }
    
    public function process_if( $matches )
    {
         $var = $matches[ 1 ];
         $option = $matches[ 2 ];
         $success = $matches[ 3 ]; 
         $unsuccess = '';
     
         $result = ($this->vars[ $var ] == $option ? $success : $unsuccess);
         return $result;
    }


Менее пошлый вариант есть?

Это сообщение отредактировал(а) gta4kv - 5.6.2009, 12:16
PM MAIL   Вверх
gta4kv
Дата 5.6.2009, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Walking around mad.
***


Профиль
Группа: Завсегдатай
Сообщений: 1868
Регистрация: 25.7.2006

Репутация: 21
Всего: 91



Идеи?
PM MAIL   Вверх
unicross
Дата 5.6.2009, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 422
Регистрация: 15.6.2008

Репутация: 21
Всего: 53



Цитата(gta4kv @  5.6.2009,  13:17 Найти цитируемый пост)
Идеи?

Код

<?php
$arr['var'] = 'str';
$str = '{if var=str}"Hello"<br>{/if}{if var=5}String{/if}';
$pattern = '#{if ([a-z]+)=([a-z0-9]+)}(.*?){/if}#sie';
$str = preg_replace($pattern, '($arr["$1"] == $2 ? "$3" : "")', $str);
echo $str;
?>

 smile 
PM MAIL WWW   Вверх
gta4kv
Дата 5.6.2009, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Walking around mad.
***


Профиль
Группа: Завсегдатай
Сообщений: 1868
Регистрация: 25.7.2006

Репутация: 21
Всего: 91



unicross, магия PHP.  smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0441 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.