PHP:数组转换问题


PHP: Array translation problems

这是我的数组:

$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时,它显示两次"战士",而不是"德鲁伊"

我该怎么解决?

为什么不直接做:

$replacements = array( 'Warrior', 'Paladin', 'Hunter', 'Rogue', 
   'Priest', 'Death Knight', 'Shaman', 'Mage', 'Warlock', 'Monk','Druid' );
$resultclass = $replacements[$row["class"] - 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];
     ?>

因为"11"="1"。第一场比赛始终为"1"。

更新

可以使用array_reverse:

    $class = "11";
 $classes = array_reverse(array( '1', '2', '4', '5', '6', '7', '8', '9', '10', '11'
    ));
 $replacements = array_reverse(array( 'Warrior', 'Paladin', 'Hunter', 'Rogue',
   'Priest', 'Death Knight', 'Shaman', 'Mage', 'Warlock', 'Monk',
   'Druid' ));
 $resultclass = str_replace( $classes, $replacements, $class );
var_dump($resultclass);

现在,第一场比赛将从大数字到最小数字开始,但如果你有12个,那就要小心了,这将是你的第12个元素,而不是"1"。"2"

str_replace的工作方式是迭代$search数组(第一个参数),并用$replace数组中相同索引处的值替换每个找到的值(第二个参数)。替换的优先级按照数组的定义顺序排列。

现在,当函数介入第一个搜索字符串"1"时,它会在字符串"11"处找到两个相应的值。这就是为什么你应该得到"战士"而不是"德鲁伊"。

你可以通过恢复数组的顺序来"快速"修复这种行为:

$classes = array_reverse($classes);
$replacements = array_reverse($replacements);

但是,如果您想要一对一的替换,则实际上并不需要str_replace。你可以这样做:

$class_index = array_search($class, $classes);
$resulting_class = $replacements[$class_index];