2015-05-15 3 views
0

Я использую этот кодpreg_replace IF тег заявление

$text = ' 
[IF=is_login] 
    [IF=is_subscriber]subscriber[/IF] 
    [IF=is_partner]partner[/IF] 
[/IF]'; 
$count = 0; 
do 
{ 
    $content = preg_replace ("#\\[IF=(.+?)\\](.*?)\\[/IF\\]#ies", "the_if('\\1', '\\2', FALSE)", $text, -1, $count); 
} 
while ($count > 0); 

Т.е. быть иерархия, но оказывается, что функция возвращает все, что идет к первому [/ IF]

Любые идеи?

ответ

0

Были дополнительные косые побега, и вам необходимо установить $text, не $content, так что она будет заменена во время цикла

$text = preg_replace ("#\[IF=(.+?)\](.*?)\[/IF\]#ies", "the_if('$1', '$2', FALSE)", $text, -1, $count); 
+0

первого выхода = [IF = is_subscriber] подписчик, но необходимость [IF = is_subscriber ] абонент [/ IF] [IF = is_partner] partner [/ IF] –

+0

Это то, что я получаю, когда я вынимаю флаг 'e' execute:' the_if ('is_login', ' the_if (' is_subscriber ',' абонент ', FALSE) the_if (' is_partner ',' partner ', FALSE) ', FALSE) ', что кажется правильным. Может помочь увидеть или узнать, что должно делать 'the_if()' –