【问题标题】:Replace words in a string using multidimensional array of contents使用多维内容数组替换字符串中的单词
【发布时间】:2025-11-28 18:45:01
【问题描述】:

我正在使用str_replace

foreach( $languages as $lang ) {
    $html = str_replace( $lang['english'], $lang['german'], $html );
}

$languages 数组包含:

$languages = array(array('english'=>'accessories','german'=>'xxxx'),array('english'=>'accessories table','german'=>'yyyyyyyy') );

现在的问题是它输出附件为xxxxaccessories tablexxxxx 表,而不是输出附件表为yyyyyyyy

【问题讨论】:

  • 这是我所期望的,在 str_replace 将其更改为 xxxx 后,它不再是原来的样子了。
  • 如果您尝试推出自己的本地化库,您将有一个真正的糟糕的时光。 php.net/manual/en/book.gettext.php
  • @ArtisticPhoenix 好吧,对它们进行排序可能会有所帮助
  • @Sammitch 我看不出有什么理由不尝试。
  • @AniketSahrawat - 有些东西不值得重建。我可以看到滚动你自己的模板系统,甚至是 MVC 框架。但是这样的事情需要大量的语言知识。

标签: php regex preg-replace str-replace


【解决方案1】:

您应该先替换“最长”的匹配词。

通过重新排列您的 $languages 数组,它应该可以解决问题

$languages = array(array('english'=>'accessories table','german'=>'yyyyyyyy'), array('english'=>'accessories','german'=>'xxxx'));

【讨论】:

  • 如果$languages有1000个元素呢?
  • $language 数组上使用自定义uksort(按长度降序)
  • 我认为 ksort 接受 int 标志,而不是比较器。
  • 对不起uksort
  • uksort 在上述上下文中不是更好的选择,因为它按键对数组进行排序,而这些键是$languages 中的012 和 OP 应该使用$languages[$index]['english'] 进行排序。您将需要另一个排序功能。
最近更新 更多