21,873
社区成员




//处理if判断标签 格式为 {if:条件} axxx {else} xxxb {end if}
function Parser_IF($c,$times=0){
//return $c;
$p = '/\{if:(.+?)\}([\s\S]*?)\{end if\}/i';
preg_match_all($p, $c, $matches);
for($k=0;$k<count($matches[0]);$k++){
$value = '';
$iff = $matches[0][$k];
$conditin = $matches[1][$k];
$r = $matches[2][$k];
if(strstr($r,'{else}')){ //如果存在else
$rr = explode('{else}',$r);
$r1 = $rr[0];
$r2 = $rr[1];
$goeval = 'if('.$conditin.'){$value = "'.htmlspecialchars($r1).'";}else{$value = "'.htmlspecialchars($r2).'";}';
} else {
$goeval = 'if('.$conditin.'){$value = "'.htmlspecialchars($r).'";}';
}
//var_dump($goeval);
if(!empty($conditin)){eval($goeval);
$value = htmlspecialchars_decode($value);
} else { $value = 'if判断语句失败!';}
$c = str_ireplace($iff,$value,$c);
}
$times++; //限制循环次数
if(preg_match($p,$c,$matche) and $times<=9) { $c = Parser_IF($c,$times);} //多次循环可能存在的嵌套
return $c;
}
$s =<<< TXT
{if:判断条件}
结果1
{if:判断条件}结果1{else}结果2{end if}
{else}
{if:判断条件}结果1{else}结果2{end if}
结果2
{end if}
TXT;
print_r(token_get_all('<?php ' . $s));
Array
(
[0] => Array
(
[0] => 372
[1] => <?php
[2] => 1
)
[1] => {
[2] => Array
(
[0] => 301
[1] => if
[2] => 1
)
[3] => :
[4] => Array
(
[0] => 307
[1] => 判断条件
[2] => 1
)
[5] => }
[6] => Array
(
[0] => 375
[1] =>
[2] => 1
)
[7] => Array
(
[0] => 307
[1] => 结果1
[2] => 2
)
[8] => Array
(
[0] => 375
[1] =>
[2] => 2
)
[9] => {
[10] => Array
(
[0] => 301
[1] => if
[2] => 3
)
[11] => :
[12] => Array
(
[0] => 307
[1] => 判断条件
[2] => 3
)
[13] => }
[14] => Array
(
[0] => 307
[1] => 结果1
[2] => 3
)
[15] => {
[16] => Array
(
[0] => 303
[1] => else
[2] => 3
)
[17] => }
[18] => Array
(
[0] => 307
[1] => 结果2
[2] => 3
)
[19] => {
[20] => Array
(
[0] => 307
[1] => end
[2] => 3
)
[21] => Array
(
[0] => 375
[1] =>
[2] => 3
)
[22] => Array
(
[0] => 301
[1] => if
[2] => 3
)
[23] => }
[24] => Array
(
[0] => 375
[1] =>
[2] => 3
)
[25] => {
[26] => Array
(
[0] => 303
[1] => else
[2] => 4
)
[27] => }
[28] => Array
(
[0] => 375
[1] =>
[2] => 4
)
[29] => {
[30] => Array
(
[0] => 301
[1] => if
[2] => 5
)
[31] => :
[32] => Array
(
[0] => 307
[1] => 判断条件
[2] => 5
)
[33] => }
[34] => Array
(
[0] => 307
[1] => 结果1
[2] => 5
)
[35] => {
[36] => Array
(
[0] => 303
[1] => else
[2] => 5
)
[37] => }
[38] => Array
(
[0] => 307
[1] => 结果2
[2] => 5
)
[39] => {
[40] => Array
(
[0] => 307
[1] => end
[2] => 5
)
[41] => Array
(
[0] => 375
[1] =>
[2] => 5
)
[42] => Array
(
[0] => 301
[1] => if
[2] => 5
)
[43] => }
[44] => Array
(
[0] => 375
[1] =>
[2] => 5
)
[45] => Array
(
[0] => 307
[1] => 结果2
[2] => 6
)
[46] => Array
(
[0] => 375
[1] =>
[2] => 6
)
[47] => {
[48] => Array
(
[0] => 307
[1] => end
[2] => 7
)
[49] => Array
(
[0] => 375
[1] =>
[2] => 7
)
[50] => Array
(
[0] => 301
[1] => if
[2] => 7
)
[51] => }
[52] => Array
(
[0] => 375
[1] =>
[2] => 7
)
)