0

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

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 )

当我将它从长名称排序到最短名称时,情况更糟,因为它会在 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=",如果是 - 替换,但我不知道如何轻松做到。

4

3 回答 3

1

也许sprintf会起作用:

foreach ( $extensions as $extension ) {
    $ret = sprintf( '<img src="images/%s" alt="%s" />: ', htmlspecialchars( $extension['img'] ), htmlspecialchars( $extension['name'] ) );
}
于 2013-05-11T21:29:03.543 回答
0

有人提到strtr()

非常有用但区分大小写,我需要不区分大小写的功能。幸运的是,有人在评论
中 写了不区分大小写的函数。stritr()

于 2013-05-11T21:46:17.823 回答
0

您不需要 foreach 循环str_ireplace(),只需像这样使用它:

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

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

于 2013-05-11T21:48:17.313 回答