2

我试图从两个单独的数组中匹配三个或更多数字,但到目前为止我所拥有的只是匹配前三个数字的代码,当我需要它来比较所有六个数字并查看是否有三个共同点时?我试过比较所有六个数字,但它不起作用。任何帮助表示赞赏。杰西卡

foreach($lottoTickets as $y => $yvalue)
{   
if($i == 0)
{
    echo " ";
}
else{
    if((($winner[0] == $lottoTickets[$y][0]) || ($winner[0] ==   $lottoTickets[$y][1]) || ($winner[0] == $lottoTickets[$y][2]) || ($winner[0] == $lottoTickets[$y][3]) || ($winner[0] == $lottoTickets[$y][4]) || ($winner[0] == $lottoTickets[$y][5])) && 
    (($winner[1] == $lottoTickets[$y][0]) || ($winner[1] == $lottoTickets[$y][1]) || ($winner[1] == $lottoTickets[$y][2]) || ($winner[1] == $lottoTickets[$y][3]) ||($winner[1] == $lottoTickets[$y][4]) || ($winner[1] == $lottoTickets[$y][5])) &&
    (($winner[2] == $lottoTickets[$y][0]) || ($winner[2] == $lottoTickets[$y][1]) || ($winner[2] == $lottoTickets[$y][2]) || ($winner[0] == $lottoTickets[$y][3]) ||($winner[2] == $lottoTickets[$y][4]) || ($winner[2] == $lottoTickets[$y][5])))

    echo "<b>Three winning numbers ID = </b>" .$y;
}
4

1 回答 1

1

你可以使用array_diff()来达到这个目的。它返回一个数组,其中包含两个给定数组中的所有差异。

如果您确定用户的乐透彩票与正确号码之间的差异,您将得到错误号码的数量。

从 6* 中减去该整数可以得到正确选择的数字的数量。

foreach ($lottoTickets as $y => $yvalue) {
  if($i == 0)
  {
    echo " ";
  }

  else {
    $diff = array_diff($lottoTickets[$y], $winner);
    $correctNumbers = 6 - count($diff);

    if ($correctNumbers >= 3) {
      echo "<b>(At least) three winning numbers ID = </b>" . $y;
    }
  }
}

这也是一个最小的工作示例:http ://codepad.org/OWrdv5Xe

*) 6 在这里不是一个神奇的数字 (→ Lotto)


至于为什么您的代码不起作用(在所有情况下):这是因为您仅将前三个正确数字与所选数字进行比较。你必须比较所有的数字。这涉及到有一个计数器变量来存储正确选择的数字的数量。

如果你真的想坚持你当前的解决方案,至少使用in_array()和一个循环。但是我在答案顶部提供的解决方案确实更好。

于 2013-10-06T16:43:30.560 回答