Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: проблема с рекурсией

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Вездеход
Отправлено: 18 Апреля, 2010 - 16:54:08
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 820
Дата рег-ции: Апр. 2008  
Откуда: Россия


Помог: 0 раз(а)




помогите плз.. наверно надо функцию зациклить как то.. или может есть более простые варианты.
вообщем есть текст вида:
текст {{щаблон1}} текст {{щаблон2}} текст {{щаблон3}} текст {{щаблон4}}

- в примере в тексте 4 шаблона. в реальности любое количество.
- каждый шаблон имеет несколько значений (минимум 1. максимума нет, есть вероятность что вообще нет значения...)

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

т.е. допустим.
текст:
текст {{щаблон1}} текст {{щаблон2}}

допустимые значения:
шаблон1 = array(значение 1_1, значение 1_2)
шаблон1 = array(значение 2_1, значение 2_2)

итог:
текст значение 1_1 текст значение 2_1
текст значение 1_1 текст значение 2_2
текст значение 1_2 текст значение 2_1
текст значение 1_2 текст значение 2_2

помогите плз... не знаю как делать


-----
о великий nl2br!
Хочешь невероятных ощущений? Юзай блокнот! Блокнот - чудеса сбываются!
Чем меньше вы знаете PHP - тем ценнее мои знания!
 
 Top
JustUserR
Отправлено: 18 Апреля, 2010 - 19:32:27
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Вездеход пишет:
Нужно получить этот текст во всех разновидностях. т.е. подставлять все значения на места шаблонов из допустимых. и чтобы не было повторов в текстах...
Если вам нужно просто перебрать все возможные сочетания текстов без пересения с собой - то можно обойтись циклом который для кадждого из элеменов проводит внутренний цикл и перебирается оставлиеся элементы (Если нужно чтобы блоки не повторялись и симметрично то второй цикл начинается со значения первого плюс единица - а если все ранво то с нуля) Число вложенных циклов опредялет длину получаемых текстов


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Вездеход
Отправлено: 18 Апреля, 2010 - 21:01:49
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 820
Дата рег-ции: Апр. 2008  
Откуда: Россия


Помог: 0 раз(а)




JustUserR
а можно поподробнее.. не совсем понял =)
(Добавление)
не получается сделать так, чтобы функция "скапливала" в себе результаты и только в конце выдавала через return
не могу додуматься как сделать...
а так впринципе сделал:
PHP:
скопировать код в буфер обмена
  1.         function __parse_this($msg, $syn) {
  2.                 preg_match_all("~{{(.*)}}~U", $msg, $regs, PREG_SET_ORDER);
  3.                 if(!empty($regs) and count($regs)>0) {
  4.                         $this_reg = $regs[0][1];
  5.                         if(!isset($syn[$this_reg])) {
  6.                                 $syn[$this_reg] = array('<...>');
  7.                         }
  8.                                 foreach($syn[$this_reg] as $sid=>$val) {
  9.                                                 $strtr = array('{{'.$this_reg.'}}'=>$val);
  10.                                                 $temp = strtr($msg, $strtr);
  11.                                                 if(count($regs)>1) {
  12.                                                         __parse_this($temp, $syn);
  13.                                                 }
  14.                                                 else {
  15.                                                         //print $temp."<br>";
  16.                                                         $_SESSION['a'][] = $temp;
  17.                                                 }
  18.                                 }
  19.  
  20.                 }

$syn - массив со словами для замены
$syn['tpl1']['val1']=111;
$syn['tpl2']['val1']=222;
$syn['tpl2']['val2']=333;
примерно так


-----
о великий nl2br!
Хочешь невероятных ощущений? Юзай блокнот! Блокнот - чудеса сбываются!
Чем меньше вы знаете PHP - тем ценнее мои знания!
 
 Top
JustUserR
Отправлено: 19 Апреля, 2010 - 11:47:28
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Вездеход пишет:
А можно поподробнее.. не совсем понял =)
Я просто по выделенной цитате описал как сделать сочения комбинаций слов определенной длины
Вездеход пишет:
Не получается сделать так, чтобы функция "скапливала" в себе результаты и только в конце выдавала через return
не могу додуматься как сделать...
Конкретно для этого можно посоветовал две вещи - или использование модификатора static для хранения значения переменной между вызовами функци - либо передавать какую-нибудь переменную (Например массив результатов) по ссылке и она также будет сохранятся между вызовами (Потому что она на самом деле не лежит внутри фунции)


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB