PHP:数组转换问题

时间:2015-11-03 15:07:29

标签: php arrays

这是我的阵列:

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

我该如何解决这个问题?

4 个答案:

答案 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];