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

如何用数组中对应键的值替换字符串内的内容?

分号分隔字符串替换为数组对应值的高效方法

问题场景

我有一个分号分隔的字符串:

$str = 'value 12; another value; yet one more one; val5';

还有一个数组,它的键正好和上述字符串里的各个值一一对应,现在需要把字符串中的每个值替换成数组里对应的键值。

目前我想到的思路是先拆分字符串并去除每个项的空格:

$arr = array_map('trim', explode(';', $str));

想问下必须要遍历这个数组,把值当键取对应内容再重新拼接吗?有没有更高效的办法?

解决方案

方法一:用strtr()一步到位(效率最高)

PHP自带的strtr()函数天生就是干批量字符串替换的,完全不用手动拆分拼接,直接搞定:

  1. 先准备好你的映射数组(键是原字符串里的值,值是你要替换成的内容):
$replaceMap = [
    'value 12' => '结果12',
    'another value' => '结果_其他',
    'yet one more one' => '结果_更多',
    'val5' => '结果5'
];
  1. 先把原字符串里的分隔符统一处理下,避免因为空格导致匹配失败:
// 把分号前后的任意空格换成单纯的分号,确保每个项和映射数组的键完全匹配
$cleanStr = preg_replace('/\s*;\s*/', ';', $str);
  1. 直接调用strtr()完成替换,要是需要保留原有的分号加空格格式,再替换回去就行:
$result = strtr($cleanStr, $replaceMap);
// 恢复分号加空格的分隔格式
$result = str_replace(';', '; ', $result);

方法二:优化你现有的拆分思路

如果更习惯自己的拆分逻辑,也不用手动遍历,用array_map就能快速处理:

$arr = array_map('trim', explode(';', $str));
$replaceMap = [/* 你的映射数组 */];

// 批量取对应值,用?? $item保证不存在的键保留原内容
$replacedArr = array_map(function($item) use ($replaceMap) {
    return $replaceMap[$item] ?? $item;
}, $arr);

// 重新拼接成字符串
$result = implode('; ', $replacedArr);

效率对比

  • strtr()是PHP底层实现的批量替换,当字符串较长、映射项多的时候,性能优势非常明显。
  • 拆分拼接的方式逻辑更直观,但性能略差一点,适合简单场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 01:05:19