这是我的阵列:
$class = $row["class"];
$classes = array( '1', '2', '4', '5', '6', '7', '8', '9', '10', '11'
);
$replacements = array( 'Warrior', 'Paladin', 'Hunter', 'Rogue',
'Priest', 'Death Knight', 'Shaman', 'Mage', 'Warlock', 'Monk',
'Druid' );
$resultclass = str_replace( $classes, $replacements, $class );
我的问题是,当我从数据库中得到11号时,它会显示“战士”两次而不是“德鲁伊”
我该如何解决这个问题?
答案 0 :(得分:4)
为什么不这样做:
$replacements = array( 'Warrior', 'Paladin', 'Hunter', 'Rogue',
'Priest', 'Death Knight', 'Shaman', 'Mage', 'Warlock', 'Monk','Druid' );
$resultclass = $replacements[$row["class"] - 1];
答案 1 :(得分:1)
为什么不这样做,将它存储为数组并将其从数组中加载。
<?PHP
$class = $row["class"];
$classes = array(
'0' => 'Warrior' , '1' => 'Paladin' , '2' => 'Hunter' , '3' => 'Rogue',
'4' => 'Priest', '5' => 'Death Knight', '6' => 'Shaman',
'7' => 'Mage', '8' => 'Warlock', '9' => 'Monk' ,'10' => 'Druid' ,
);
$resultclass = $classes[$class];
?>
答案 2 :(得分:0)
因为“11”=“1”。“1”所有时间都会替换第一场比赛。
<强>更新强>
可以使用array_reverse:
{{1}}
现在第一场比赛将从大号码开始到最小值,但是如果你有12号牌就会小心你的第12个元素不是“1”。“2”
答案 3 :(得分:0)
str_replace的工作方式是迭代$ search数组(第一个参数)并将每个找到的值替换为$ replace数组(第二个参数)中相同索引的值。替换的优先顺序是数组的定义顺序。
现在,当该功能逐步显示您的第一个搜索字符串&#39; 1&#39;时,它会在您的字符串&#39; 11&#39;中找到两个相应的值。这就是为什么你应该得到WarriorWarrior&#39;而不是德鲁伊&#39;。
你可以快速制作一个&#39;通过恢复数组的顺序来修复该行为:
$classes = array_reverse($classes);
$replacements = array_reverse($replacements);
但是如果你想要一对一替换,那么就不需要str_replace了。你可以这样做:
$class_index = array_search($class, $classes);
$resulting_class = $replacements[$class_index];