在while循环中忽略简单错误/规则检查

时间:2018-02-16 07:28:46

标签: php arrays

我试图在每次迭代时返回一个新数字,但这些值必须是唯一的,它不能两次添加相同的值。

我添加了一个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;
  }

}

问题在于:https://eval.in/957298

2 个答案:

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