使用array_rand从合并数组中获取单个数字

时间:2018-04-19 12:32:10

标签: php arrays

我想从数组中随机选择,但它确实显示了不是来自我选定数组的其他数字。

<?php
$MainArray = array(
    'IC' => array(4,19,22,42,61,80,82,88),
    'IR' => array(9,12,17,45,46,67,68,89),
    'JP' => array(6,26,39,53,93),
    'DP' => array(1,8,14,35,38,59,70,71),
    'TA' => array(0,2,3,5,7,10,11,13,15,16,18,20,21,23,24,25,27,28,29,30,31,32,33,34,36,37,40,41,43,44,47,48,49,50,51,52,54,55,56,57,58,60,62,63,64,64,66,69,72,73,74,75,76,77,78,79,81,83,84,85,86,87,90,91,92,94,95,96,97,98,99)
);
$ArrayNumbers = array_merge($MainArray['IC'], $MainArray['IR'], $MainArray['TA'], $MainArray['DP']);
$setSelectedNumber = array_rand($ArrayNumbers);
if(in_array($setSelectedNumber, $MainArray['JP'])){
    echo 'ERROR FOUND: '.$setSelectedNumber;
}else{
    echo $setSelectedNumber;
}
?>

我希望从合并的数组中获取一个随机匹配数字,但它也会显示我不想要的JP数组6,26,39,53,93中的数字。

2 个答案:

答案 0 :(得分:2)

array_rand会返回随机选择的而不是值。您可以通过此键获取值,如下所示:

$setSelectedNumber = $ArrayNumbers[array_rand($ArrayNumbers)];

答案 1 :(得分:1)

亚历克斯的答案是对的。使用rand和数组长度获取随机密钥的另一种可能的解决方案:

<?php
$MainArray = array(
 'IC' => array(4,19,22,42,61,80,82,88),
 'IR' => array(9,12,17,45,46,67,68,89),
 'JP' => array(6,26,39,53,93),
 'DP' => array(1,8,14,35,38,59,70,71),
 'TA' => array(0,2,3,5,7,10,11,13,15,16,18,20,21,23,24,25,27,28,29,30,31,32,33,34,36,37,40,41,43,44,47,48,49,50,51,52,54,55,56,57,58,60,62,63,64,64,66,69,72,73,74,75,76,77,78,79,81,83,84,85,86,87,90,91,92,94,95,96,97,98,99)
 );
 $ArrayNumbers = array_merge($MainArray['IC'], $MainArray['IR'], $MainArray['TA'], $MainArray['DP']);

 // select a random key of the array
 $randomKey = rand(0, count($ArrayNumbers) - 1)
 // Here you have a random Element
 $setSelectedNumber = $ArrayNumbers[$randomKey];


 if(in_array($setSelectedNumber, $MainArray['JP'])){
  echo 'ERROR FOUND: '.$setSelectedNumber;
 }else{
   echo $setSelectedNumber;
 }
 ?>

快乐的编码!