2012-11-28 59 views
-1

我嘗試從替換字符串中的字符,並把別人,這種使用preg_replace_callback函數,問題是原始文本和顯示型動物的這種功能變化順序結果腓preg_replace_callback沒有工作我

例如,如果字符串it' S:

大家好[1-2-3]這it's一個測試[4-5-6-7-8] --->原文

腳本搜索[]並將此內容與[]來回分開米等文字,但顯示我,因爲我把這裏:

1-2-3 4-5-6-7-8大家好這it's一個測試--->壞的結果

當正確的順序it's不[]第一

大家好1-2-3這個it's一個測試4-5-6-7-8

劇本我創建:

<?php 

$text = " This is a test [gal~ruta~100~100] This is other test [gal~ruta2~100~100]"; 

function gal($matches) 
{ 

global $text; 

$exp=explode("~",$matches[1]); 

$end=str_replace($matches[1],$a,$text); 

if ($exp[0]=="gal") 
{ 
$a="".$exp[1]."".$exp[2]."".$exp[3].""; 
echo $a; 
} 


} 


echo preg_replace_callback(
"/\[(.*?)\]/", 
"gal", 
$text); 

?> 

Thank's大家的幫助

回答

1

您需要從您的回調,這將在原來的字符串替換返回的東西。你當然不想echo,它會將值直接發送到輸出,按執行順序。

但是,聽起來好像你甚至不需要回調函數來刪除數字的括號。

$str = preg_replace("/\[(.*?)\]/", "$1", $str); 

CodePad

+0

是的原來的字符串我使用短代碼,並需要替換這個shortcodes讀取圖庫和顯示它的功能,但我沒有得到作品,並顯示原始字符串,並取代這些簡碼的功能,謝謝' s! – Robert

+0

是的正確,但這些標籤作爲短代碼,需要替換的功能,並在每種情況下顯示畫廊,我不能做到這一點,我嘗試了很多次,我不能做的作品或如果worls文本的順序改變.. ...如果你需要看到我可以放的所有代碼,謝謝 – Robert