2012-04-03 42 views
0

我正在尋找一種方法來用圖像替換某些字符串。所有字符串都包含在{}中,當代碼看到裏面的內容將被讀取並且它等於什麼時將成爲特定圖像。我還沒有模糊的如何實現這一點,並希望有人能給我一個例子。用圖像替換字符串

這裏是我的榜樣,以更好地解釋:

{1} is replaced with an image 

所以,當代碼看到{}它將激活。現在,它不會干擾代碼的其他部分,它僅限於1個字符,並且僅限於某些字符。這是魔術卡鑄造的成本更具體。因此,這將太有限.....

B,U,R,G,W,X,T,1-99例如

============ ===================

所以......這樣的事情?

$image_string = '{R}{R}{R}{3} 

$Mana_symbol ='BURGWXT1-99'; 

$output = preg_replace_all('/\{([' . $Mana_symbol. '])\}/', '<img src="\1.png"/>', $string); 

switch ($output) 
{ 
    case ('B'): 
     $mana = '<img src = "black_mana.png"/>'; 
     break; 
    case ('U'): 
     $mana = '<img src = "blue_mana.png"/>'; 
     break; 
    case ('G'): 
     $mana = '<img src = "green_mana.png"/>'; 
     break; 
    case ('R'): 
     $mana = '<img src = "red_mana.png"/>'; 
     break; 
    case ('W'): 
     $mana = '<img src = "white_mana.png"/>'; 
     break; 
    case ('1'): 
     $mana = '<img src = "1_colorless_mana.png"/>'; 
     break; 
    case ('2'): 
     $mana = '<img src = "2_colorless_mana.png"/>'; 
     break; 
    case ('3'): 
     $mana = '<img src = "3_colorless_mana.png"/>'; 
     break; 

     ....etc.... 

我不應該使用preg_replace_all,因爲會有一些這樣的多個實例嗎?就像在上面的$ image_string的例子中一樣,它會替換匹配的字符串中的所有發生的東西?

+0

是字符串從數據庫或文件或用戶輸入讀取或者他們嵌入現有的內HTML還是PHP?至於替換{}中的值是否有某種映射或查找,或者這是否存儲在數據庫表中? – TheOx 2012-04-03 23:29:43

+0

正在從XML文件中提取信息,然後分配變量,並根據所提取的信息自動創建帖子。 – 2012-04-03 23:38:14

回答

3

下面是使用正則表達式的例子(見http://www.php.net/pcre):

說你的圖像被稱爲x.png的標籤{x}

<?php 

$string = '{1} is replaced with an image'; 

// Use a regular expression 
// The codes below will be placed into a character class 
$validCodes = 'BURGWXT0-9'; 

// This array contains the image transforms 
$images = array(
    'B' => 'black_mana.png', 
    'U' => 'blue_mana.png', 
    // ... 
); 

// Use preg replace to insert the images 
$string = preg_replace_callback(
    '/\{([' . $validCodes . ']+)\}/', 
    function($m) use ($images) { 
     if (isset($images[$m[1]])) { 
      return '<img src="' . $images[$m[1]] . '"/>'; 
     } 
     return ''; 
    }, 
    $string 
); 

echo $string; 

?> 

請詢問您是否需要進一步澄清。

編輯

我添加了一個機制,讓你通過填充陣列添加自己的轉換。

preg_replacepreg_replace_callback都將替換它們在字符串中找到的所有發生。

請注意,我使用的匿名函數僅適用於PHP 5.3.0+(http://php.net/manual/en/functions.anonymous.php)。

編輯2

我剛剛意識到,對於正則表達式的字符類不會捕獲所有你的人物,那你需要的+字符類後,捕捉到一些你的代碼。

+0

我已經在上面的原始帖子中添加了我的回覆,因爲它太大而不能發表評論:) – 2012-04-03 23:55:50

+0

查看更新的答案。 – Pete 2012-04-04 00:45:22

+0

Hi Pete在插入產品數據時會刪除整個描述區域。你介意看看這段代碼嗎? http://codepad.org/okkOKaIj ....而且我也運行PHP 5.3.10並且匿名函數可以正常工作。 – 2012-04-04 09:48:39

1

Youu可以使用正則表達式來解析所有的{}的出那麼str_replace函數他們後來

preg_match_all('/{(1|2|3|99|a)}/', "{1} is replaced with an image{a} {99}", $match)