You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP strtr函数匹配首个替换规则后停止执行的实现方案

核心原因

当前示例输出不符合预期、且原生strtr无法满足需求的根因有两点:

  • PHP关联数组天然不支持重复键,你定义的$transformarciudades中两个同名Lalibertad键,后写入的"La Libertad2"会直接覆盖前值,实际传入函数的替换规则里根本不存在"Lalibertad" => "La Libertad"这一条。
  • 原生strtr逻辑不匹配需求:它不会按你写的数组顺序遍历匹配,而是会先将所有替换键按长度从长到短排序后做全局匹配,必须遍历处理完所有规则才会返回结果,无法做到命中首个规则就终止,大规则集下会产生不必要的性能开销。
可直接落地的实现

通过顺序遍历+命中即终止的逻辑即可实现需求,性能完全可控:

$citygen = "Lalibertad";
// 替换规则按优先级从上到下排列,禁止重复键,避免被PHP自动覆盖
$transformarciudades = [
    "Sanmartin" => "San Martín",
    "Lalibertad" => "La Libertad",
    // 其余替换规则按优先级向下追加即可
];

foreach ($transformarciudades as $search => $replace) {
    // 全字符串精确匹配场景使用全等判断,性能最高
    if ($citygen === $search) {
        $citygen = $replace;
        break; // 命中后立刻终止循环,不再遍历后续规则
    }

    // 如果需要做子串替换,将上面的判断替换为以下逻辑即可
    // if (str_contains($citygen, $search)) {
    //     $citygen = str_replace($search, $replace, $citygen);
    //     break;
    // }
}

echo $citygen; // 输出:La Libertad
性能说明
  • 规则匹配顺序完全可控,严格遵循你定义的规则优先级
  • 命中规则后立刻退出循环,不会遍历剩余所有替换规则,大体量规则集下相比原生strtr能有效降低服务器负载
  • 精确匹配场景下的===判断性能远高于通用字符串替换函数,执行效率更优

内容的提问来源于stack exchange,提问作者Club

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 14:27:18