2013-05-11 60 views
0

我有多維數組(名稱+圖片路徑),其中一些名字是相似的,如:PHP多個替代

array("name" => "OpenGL", "img" => "OpenGL.png"), 
array("name" => "OpenGL Lighting (Advanced)", "img" => "OpenGL-LightingAdvanced.png") 

然後我更換圖片名稱。

foreach ($extensions as $extension) { 
    $ret=str_ireplace($extension['name'],'<img src="images/'.$extension['img'].'" alt="'.$extension['name'].'" />: ',$ret); 
} 

只要數組從最短名稱到最長名稱排序,但在這種情況下,更長的名稱將永遠不會改變,例如。 OpenGL的照明(高級)將

<img src="images/OpenGL.png" alt="OpenGL" /></div>: Lighting (Advanced) 

當我從longes名稱對其進行排序,以最短的它更是雪上加霜,病程會在SRC更改名稱:

<img src="images/<img src="images/OpenGL.png" alt="OpenGL" />: -LightingAdvanced.png" alt="<img src="images/OpenGL.png" alt="OpenGL" />: Lighting (Advanced)" />: 

我唯一的想法是檢查如果沒有src =「images/alt =」之前名稱,如果是 - 替換,但我不知道我怎麼能輕鬆做到。

+0

您可以隨時將引號添加到替換中,對其進行分隔! – adeneo 2013-05-11 21:30:06

+0

類似於'str_ireplace($ extension ['name']。「」''?很遺憾我不能這樣做: – Andy 2013-05-11 21:37:59

回答

1

也許sprintf將工作:

foreach ($extensions as $extension) { 
    $ret = sprintf('<img src="images/%s" alt="%s" />: ', htmlspecialchars($extension['img']), htmlspecialchars($extension['name'])); 
} 
+0

你需要'htmlspecialchars()'作爲字符串參數以確保正確的html輸出... – escitalopram 2013-05-11 21:30:01

+0

100%真實,後更新爲'htmlspecialchars($ extension ['img'])' – Danijel 2013-05-11 21:35:45

+0

也許nooby,但我沒有看到我可以如何快速使用sprintf。$ ret包含字符串像'「bla bla OpenGL bla bla OpenGL Lighting (高級)bla「',我想把這個名字改成圖像... – Andy 2013-05-11 21:36:28

0

有人提到strtr()

非常有幫助,但區分大小寫,我需要不區分大小寫的函數。
幸運的是,有人在comments中寫了不區分大小寫的函數stritr()

0

你不需要圍繞str_ireplace() foreach循環,只是用這樣的:

$ret=str_ireplace($array_of_all_search_words, $array_of_all_replacement_words, $ret); 

,它不會取代任何它已經取代。不過,您可能仍然需要按照篇幅對搜索詞進行排序。