使用关联数组进行字符串替换

问题描述 投票:0回答:4

我有一个关联数组,其中键是搜索字符串,值是替换字符串。

$list = ['hi' => 0, 'man' => 1];
$string = "hi man, how are you? man is here. hi again."

它应该产生

$final_string = "0 1, how are you? 1 is here. 0 again."

我怎样才能实现这个目标?

php arrays string replace associative-array
4个回答
23
投票

从我的头顶上下来:

$find       = array_keys($list);
$replace    = array_values($list);
$new_string = str_ireplace($find, $replace, $string);

18
投票

可以使用

strtr()
在一行中完成。

引用文档:

如果给定两个参数,第二个参数应该是

array('from' => 'to', ...)
形式的数组。返回值是一个字符串,其中所有出现的数组键都已替换为相应的值。将首先尝试最长的密钥。一旦子字符串被替换,就不会再次搜索其新值。

要获取修改后的字符串,您只需执行以下操作:

$newString = strtr($string, $list);

这将输出:

0 1, how are you? 1 is here. 0 again.

演示。


1
投票

preg_replace
可能会有所帮助。

<?php
$list = Array
(
    'hi' => 0,
    'man' => 1
);
$string="hi man, how are you? Man is here. Hi again.";

$patterns = array();
$replacements = array();

foreach ($list as $k => $v)
{
    $patterns[] = '/' . $k . '/i';  // use i to ignore case
    $replacements[] = $v;
}
echo preg_replace($patterns, $replacements, $string);

1
投票
$text = strtr($text, $array_from_to)

参见 http://php.net/manual/en/function.strtr.php

© www.soinside.com 2019 - 2024. All rights reserved.