2012-06-14 66 views
0

我想模板的文檔,我想通過搜索文檔[%text%]$array['text']$text替換它來代替動態文本文檔的部分。我知道我可以使用str_replace("[%text%]", $array['text'], $page),但我想查找[%(.*?)%]的所有實例,並用$array[$1]而不是$1替換。我試過使用create_function($matches, $array),但它抱怨Missing argument 2 for {closure}()中的preg_match更換後向引用與字符串變量

$page = preg_replace('#\[%(.*?)%\]#is', $array["$1"], $page); 
+0

create_function這兩個參數都是字符串,你傳遞$ array,是$ array是字符串嗎? – Poonam

回答

0

可以preg_match_all('#[%(.*?)%]#is', $page, $matches);然後

if(count($matches == 2)) 
{ 
    $key = 0; 
    foreach(array_unique($matches[0]) as $val) 
    { 
    if(isset($array[$key])) 
    { 
     $page = str_replace($val, $array[$key++], $page); 
    } 
    else 
    { 
     break; // more matches than array elements 
    } 
    } 
} 
+0

這個解決方案對我來說很不錯,但我不得不稍微調整一下。 $ page = str_replace('[%'。$ val。'%]',$ array [$ key],$ page);我刪除了休息時間;如果未設置$ array [$ key],則阻止它結束循環。 – user1456389

+0

噢,它有錯誤。 '$ key ++'應該在'str_replace'行。如果將'foreach(array_unique($ matches [1])作爲$ val)'更改爲'foreach(array_unique($ matches [0])作爲$ val),那麼不做任何調整,它會按照您的意思行事。我會做一個編輯。 – core1024

0

首先做一個preg_match並找到匹配的名字。然後用替換每個找到的名稱來使數組變得怪異。然後使用preg_replace和數組作爲第二個參數,從而用數組中的項替換名稱。

0

你可以用preg_replace_callback做到這一點。

<?php 
$page = preg_replace_callback('#\[%(.*?)%\]#is', 
    function ($m){ 
    GLOBAL $array; 
    return $array[$m[1]]; 
    } 
, $page); 
?>