如何使用相同的随机生成索引从两个数组中检索值?

3

我想使用随机生成的索引访问并显示每个数组中相同索引位置上的一个值。

我的代码:

$userRank = array(
    "Nightowl",
    "Demon Hunter",
    "Shadow Walker",
    "Legend"
);

$userLevel = array(
    "Level 5",
    "Level 10",
    "Level 15",
    "Level 20",
);

$deck = array();    
foreach($userRank as $rank){
    foreach($userLevel as $level){
        $deck[] = array("level" => $level, "rank" => $rank);
    }
}

shuffle($deck);
$getVal = array_shift($deck);

echo $getVal['level'] . ' ' . $getVal['rank'];

这样做的最终结果是数组从提供的数组中随机获取值。
例如:10级夜猫子20级影行者 编辑:我已经知道如果使用多维数组,可以将它们分配给彼此,但我想用两个单独的数组来完成。
2个回答

2
你是否期望得到这样的结果?在这里,我们使用 array_map 并从函数中返回级别和等级数组。 在此处尝试此代码片段
<?php
ini_set('display_errors', 1);
$userRank = array(
    "Nightowl",
    "Demon Hunter",
    "Shadow Walker",
    "Legend"
);

$userLevel = array(
    "Level 5",
    "Level 10",
    "Level 15",
    "Level 20",
);

$deck=array_map(function($uL,$uR){
    return array("level" => $uL, "rank" => $uR);//returning array with level and rank
},$userLevel,$userRank);

shuffle($deck);
$getVal = array_shift($deck);

echo $getVal['level'] . ' ' . $getVal['rank'];

1
我已经知道如果使用多维数组,您可以将它们互相分配,但我想使用两个单独的数组来完成此操作。
我觉得其他答案不符合您的条件。这个任务可以用只有两行代码更简单地完成。
将数组组合、洗牌数组、然后修改数组(切掉第一个元素)只是浪费/间接的编程实践,当您只想使用一个随机键/索引访问每个数组中的单个元素时--这样,您可以在脚本下方重新使用原始(未受损坏的)数组。
这是最直接的方法:
代码:(Demo)
$rand_index=rand(0,sizeof($userRank)-1);  // generate a random key/index
echo "{$userLevel[$rand_index]} {$userRank[$rand_index]}";  // display the desired values

可能的输出:

输出结果:

Level 10 Demon Hunter

我会把它给你,因为我更喜欢你的答案。 - Jordan Brown
@Jordan 说得对。Sahil最终需要学会放慢脚步,发布更高质量的答案,而不是在8分钟内匆忙回答问题而没有完全理解问题。你做得很好。我认为只有失去绿色勾号,他才会学会不那么匆忙。 - mickmackusa
1
是的,我希望大多数用户都能这样做。我更愿意得到一个正确(或更好)的解决方案,而不是一个“只是能用”的解决方案。 - Jordan Brown

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接