我有多维数组(名称+图像路径),其中一些名称相似,如:
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 =”,如果是 - 替换,但我不知道我怎么能轻松做到。
答案 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);
并且它不会替换它已经替换的任何东西。但是,您可能仍需要按长度对搜索词进行排序。