str_replace替换错误值的问题



我试图用它们的相关标题替换一个数字列表(id(,问题是当标题有一个数字时,也会被替换,例如:

$idlist = "1, 2, 3";
$a = array(17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1);
$b = array('Star Trek 7', 'Superman 8', 'Toy Story 2', 'Terminator 3', 'Other', 'Superman 4', 'Star Trek 3', 'Superman 3', 'Mad Max 3', 'Mad Max 2', 'Superman 3', 'Superman 2', 'Christmas Vacation 3', 'Star Trek 2', 'Terminator 2', 'Toy Story 3', 'Mission Impossible 2');
echo str_replace($a, $b, $idlist);

错误的当前结果:

Mission Impossible 2, Toy Story 3, Terminator Toy Story 3

应为:

Mission Impossible 2, Toy Story 3, Terminator 2

有什么更好的方法可以做到这一点?

尝试strtr而不是str_replace:

$idlist = "1, 2, 3";
$a = array(17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1);
$b = array('Star Trek 7', 'Superman 8', 'Toy Story 2', 'Terminator 3', 'Other', 'Superman 4', 'Star Trek 3', 'Superman 3', 'Mad Max 3', 'Mad Max 2', 'Superman 3', 'Superman 2', 'Christmas Vacation 3', 'Star Trek 2', 'Terminator 2', 'Toy Story 3', 'Mission Impossible 2');
$pairs = array_combine($a, $b);
echo strtr($idlist, $pairs);

结果:

Mission Impossible 2, Toy Story 3, Terminator 2

您可以简单地组合这两个数组,并将ID列表替换为preg_replace_callback:

$array = array_combine($a, $b);
$result = preg_replace_callback('/(d+)/', static function($matches) use ($array) {
return $array[$matches[1]];
}, $idlist);
var_dump($result);

尝试像整数数组一样创建id列表:

$idlist = array(1, 2, 3);

代替";1、2、3";你可以使用:

array($b[0], $b[1], ... $b[n]). 

使用此表单,您只能替换数组$b中的名称,并且名称将在数组列表中自动更改。

编辑:

将字符串转换为数组:

$ids = explode(",", $idlist);

你可以使用这样的数组:

$arrayNames = array($b[intval($ids[0])], $b[intval($ids[1])], ... $b[intval($ids[n])]). 

最新更新