PHP多次替换

时间:2013-05-11 21:17:14

标签: php replace

我有多维数组(名称+图像路径),其中一些名称相似,如:

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 Lighting(高级)将是

<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 =”,如果是 - 替换,但我不知道我怎么能轻松做到。

3 个答案:

答案 0 :(得分:1)

也许sprintf可行:

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

答案 1 :(得分:0)

有人提到 strtr()

非常有帮助但有案例感,我需要不区分大小写的功能 幸运的是有人在comments中写了不区分大小写的函数 stritr()

答案 2 :(得分:0)

你不需要str_ireplace()周围的foreach循环,只需像这样使用它:

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

并且它不会替换它已经替换的任何东西。但是,您可能仍需要按长度对搜索词进行排序。