2015-11-05 73 views
0

我想用一些函數替換文本中的項目。例如,我想從所見即所得的滑塊,我寫這樣的{SLIDER_8879},其中SLIDER-是功能類型,8879-是參數(例如文件夾)。多個ob_start()和ob_get_clean()

因此,例如:

<?php 
    function xxx($fname, $value){ 
echo"<span style='color:orange;'>$fname|$value this is CAROUSEL</span> "; 
} 

function callback ($match) { 
    if ($match[2] === "SLIDER"){ 
     return "<span style='color:red'>This is a slider</span>"; 
    }else if($match[2] === "POLL"){ 
     return rand(8888888888, 8888888888888888888888);    
    }else if($match[2] === "CAROUSEL"){ 
     xxx($match[2], $match[4]); 
    }else{ 
     echo"<span style='color:blue'>ESIM INCH!</span>"; 
    } 
} 

$body = "{{SLIDER_fff}} sdfasdfas dfasd {{POLL_8879}} dsgasdgasdgds {{CAROUSEL_888}} sdffasd f asd f a {{SLIDER_8879-folder}} dfgdf g dsfsfgfg d fdfgd {{BIBIN_folder}} sdfsdf"; 
$pattern = "/({{2})([A-Z]+)(_{1})([a-zA-Z0-9_\-]+)(}{2})/"; 
$body = preg_replace_callback($pattern, "callback", $body); 

echo $body; 
?> 

我得到這個排序:

輪轉| 888這是輪轉ESIM INCH這是一款滑蓋sdfasdfas dfasd 123055895 dsgasdgasdgds sdffasd˚FASD發這是一款滑蓋dfgdf克dsfsfgfg d fdfgd sdfsdf

想要擁有權保換順序:

這是一個滑塊sdfasdfas dfasd 123055895個dsgasdgasdgdsç AROUSEL | 888這是CAROUSEL sdffasd f asd f a這是一個滑塊dfgdf g dsfsfgfg d fdfgd ESIM INCH! sdfsdf

+0

沒有人可以幫忙嗎? –

+0

所以我需要使用php preg_replace_callback並獲得正確的替換命令! –

回答

0

該回調應該返回替換字符串。

也許這更新的代碼是你在找什麼:

<?php 
function xxx($fname, $value){ 
    return "<span style='color:orange;'>$fname|$value this is CAROUSEL</span> "; 
} 

function callback ($match) { 
    if ($match[2] === "SLIDER"){ 
     return "<span style='color:red'>This is a slider</span>"; 
    }else if($match[2] === "POLL"){ 
     return rand(8888888888, 8888888888888888888888); 
    }else if($match[2] === "CAROUSEL"){ 
     return xxx($match[2], $match[4]); 
    }else{ 
     return "<span style='color:blue'>ESIM INCH!</span>"; 
    } 
} 

$body = "{{SLIDER_fff}} sdfasdfas dfasd {{POLL_8879}} dsgasdgasdgds {{CAROUSEL_888}} sdffasd f asd f a {{SLIDER_8879-folder}} dfgdf g dsfsfgfg d fdfgd {{BIBIN_folder}} sdfsdf"; 
$pattern = "/({{2})([A-Z]+)(_{1})([a-zA-Z0-9_\-]+)(}{2})/"; 
$body = preg_replace_callback($pattern, "callback", $body); 

echo $body; 
?>