我试图在每次迭代时返回一个新数字,但这些值必须是唯一的,它不能两次添加相同的值。
我添加了一个if检查以查看该数字是否已经在数组中但由于某种原因它会不断被忽略并且有时会添加重复的数字。
$data = array(0 => array('random_id' => '1'), 1 => array('random_id' => '2'), 2 => array('random_id' => '3'), 3 => array('random_id' => '4') );
$new_data = array();
$count = 0;
while(true){
$rand = rand(1, 6);
if(in_array($rand, array_column($data, 'random_id'))){
continue;
} else {
$arr = $rand;
array_push($new_data, $arr);
$count++;
}
if($count == 3){
break;
}
}
答案 0 :(得分:1)
It's happening because array returned from array_column()
only have these values and you have provided range 1 to 6 in rand()
:
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
)
Check here: http://sandbox.onlinephpfunctions.com/code/bc1d4ea514199707e38821f6b395dd4153b0a32b
答案 1 :(得分:1)
在进行推送之前,您没有检查该值是否在$new_data
。
将上一个条件设为:
if (in_array($rand, array_column($data, 'random_id')) || in_array($rand, $new_data)) {
然后,当然,你需要知道,当只有两个可用时,你要求三个结果。
就生成一组唯一的随机数而言,这是一种更简单的方法:
$data = [];
while (count($data) < 3) {
$rand = rand(1,6);
if (!in_array($rand, $data))
$data[] = $rand;
}
这将填充$data
三个随机数,范围为1到6