好吧,您的假设存在一个小问题
规则1
The overall goal is that each list has no relationship or common pattern to it's previous list.
规则 2
The rule is that the first element of the list and the last element can't be the start and end elements from the previous list.
这两者相互矛盾。首先可能没有关系,所以随机。所以正如你所说的洗牌(没看是我相信你的话)。但是第二个需要知道前一个。与您之前的规则有什么矛盾。
但是您可以做的是拥有上一次抽奖(前 52 个)的第一个和最后一个元素。然后你洗牌当前的平局。如果第一个和/或最后一个元素相同,则再次绘制,直到找不到匹配项。
我也认为这个词是半随机的。
看看do{ }while();
诀窍。
在评论彼此之间没有相同的4个元素之后,下一部分来了。
您需要的是识别元素的方法,所以让我们假设每个“项目”都有一个 id(出于示例的目的,我只使用 5 个元素)
让我们使用以下
array(
0 => array('id' => 1,),
1 => array('id' => 2,),
2 => array('id' => 3,),
3 => array('id' => 4,),
4 => array('id' => 5,),
)
下一次抽签完全相同(仅出于示例的目的)。我们所做的是创建一个绘制的 id 数组:
array(
0 => 1,
1 => 2,
2 => 3,
3 => 4,
4 => 5,
)
然后在以下函数中使用这个数组(未选中但应该给你一个正确的开始)
function check(array $prev, array $draw, $the_same = 4) {
$to_check = count($prev) - $the_same;
for($i = 0; $i < $to_check; $i++) {
if ($array_slice($prev, $i, $the_same) === array_slice($draw, $i, $the_same)) {
return false;
}
}
return true;
}
是做什么的,你给它旧的数组和你画的那个,你给它的数字,有多少次出现在彼此之后,可能是一样的。然后它只是开始循环和数组切片以检查它们是否相等。