Php str_replace替换错误值时出现问题

Php str_replace替换错误值时出现问题,php,Php,我试图用相关标题替换数字列表(ID),问题是当标题包含数字时也会被替换,例如: $idlist=“1,2,3”; $a=数组(17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1); $b=阵列(‘星际迷航7’、‘超人8’、‘玩具总动员2’、‘终结者3’、‘其他’、‘超人4’、‘星际迷航3’、‘超人3’、‘疯狂总动员2’、‘超人3’、‘超人2’、‘圣诞假期3’、‘星际迷航2’、‘终结者2’、‘玩具总动员3’、‘不可能的任务2’); echo str_replace(

我试图用相关标题替换数字列表(ID),问题是当标题包含数字时也会被替换,例如:

$idlist=“1,2,3”;
$a=数组(17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1);
$b=阵列(‘星际迷航7’、‘超人8’、‘玩具总动员2’、‘终结者3’、‘其他’、‘超人4’、‘星际迷航3’、‘超人3’、‘疯狂总动员2’、‘超人3’、‘超人2’、‘圣诞假期3’、‘星际迷航2’、‘终结者2’、‘玩具总动员3’、‘不可能的任务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

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

尝试创建一个像整数数组一样的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])]). 

尝试创建类似整数数组的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])]). 

请尝试
strtrtr
而不是
str\u replace

$idlist=“1,2,3”;
$a=数组(17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1);
$b=阵列(‘星际迷航7’、‘超人8’、‘玩具总动员2’、‘终结者3’、‘其他’、‘超人4’、‘星际迷航3’、‘超人3’、‘疯狂总动员2’、‘超人3’、‘超人2’、‘圣诞假期3’、‘星际迷航2’、‘终结者2’、‘玩具总动员3’、‘不可能的任务2’);
$pairs=数组和组合($a,$b);
echo strtr($idlist,$pairs);
结果:

Mission Impossible 2, Toy Story 3, Terminator 2

请尝试
strtrtr
而不是
str\u replace

$idlist=“1,2,3”;
$a=数组(17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1);
$b=阵列(‘星际迷航7’、‘超人8’、‘玩具总动员2’、‘终结者3’、‘其他’、‘超人4’、‘星际迷航3’、‘超人3’、‘疯狂总动员2’、‘超人3’、‘超人2’、‘圣诞假期3’、‘星际迷航2’、‘终结者2’、‘玩具总动员3’、‘不可能的任务2’);
$pairs=数组和组合($a,$b);
echo strtr($idlist,$pairs);
结果:

Mission Impossible 2, Toy Story 3, Terminator 2

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


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



构建一个映射,其键为电影版本,值为文本。然后使用第一个数组中的数字在映射中查找。文档中描述了此功能的行为(“因为str_replace()从左到右替换,所以在执行多次替换时可能替换以前插入的值”)。转到手册页,阅读注释和代码示例。尝试另一种解决方案,可能是正则表达式?构建一个映射,其键是电影版本,其值是文本。然后使用第一个数组中的数字在映射中查找。文档中描述了此功能的行为(“因为str_replace()从左到右替换,所以在执行多次替换时可能替换以前插入的值”)。转到手册页,阅读注释和代码示例。尝试另一种解决方案,可能是正则表达式?问题是id列表已经创建,我从数据库中获取这些id列表作为字符串…我用更多细节编辑我的答案。谢谢Mark II先生问题是id列表已经创建,我从数据库中获取这些id列表作为一个字符串…我用更多细节编辑我的答案。谢谢Mark II先生非常感谢Gander这解决了我的问题!现在我想知道@mihai matei的答案到底是正确的。当您以不同的顺序获取标识符时,会出现问题,它会在标识符
123
中找到键
12
。但是如果我保持从大id到小id的顺序,应该可以。应该可以。非常感谢您,这解决了我的问题!现在我想知道@mihai matei的答案到底是正确的。当您以不同的顺序获取标识符时,会出现问题,它会在标识符
123
中找到键
12
。但是如果我保持从大id到小id的顺序,应该可以。应该可以。刚才我意识到您给出了一个更好的答案。你的答案应该是答案。就在刚才,我意识到你给出了一个更好的答案。你的答案应该是解决方案。