PHP:比较两组数字,没有欺骗

Posted

技术标签:

【中文标题】PHP:比较两组数字,没有欺骗【英文标题】:PHP: Compare two sets of numbers, no dupes 【发布时间】:2012-02-16 11:49:06 【问题描述】:

我正在为我的网站创建一个彩票比赛,我需要知道比较数字的最简单方法,这样没有两个人可以选择相同的数字。它是7组数字,每个数字是1到30之间的一个数字。

例如,如果用户 1 选择:1、7、9、17、22、25、29,我如何确保用户 2 不能选择相同的确切数字?

我正在考虑将所有 7 个数字放入一个数组中,对其进行排序以使数字按顺序排列,然后将它们连接成一个字符串。然后当另一个用户选择他们的 7 个数字时,它会做同样的事情,然后将两者进行比较。有没有更好的方法?

【问题讨论】:

【参考方案1】:

你所描述的对我来说听起来是最好的方式,如果你正在处理同一个脚本中的所有提交 - 我会 trim(implode(',',$array)) 排序数组,将结果字符串存储在一个数组中并调用in_array()判断值是否已经存在。

但是我怀疑您实际上正在做的是将选择存储在数据库表中,并将以后提交的内容与该表进行比较。在这种情况下(我冒昧地假设这里是 mysql,但我会说它是 php 最常用的引擎)你应该创建一个包含 7 列的表 choice_1, choice_2 ... choice_7(along与您想要的任何其他列)并跨所有七个 choice_* 列创建唯一索引。这意味着当您尝试插入重复行时,查询将失败。这让 MySQL 为您完成所有工作。

【讨论】:

对不起,应该提到MySQL。是的,计划将其存储在数据库中。 6 个数字可以相同,但不是全部 7 个。在所有 7 个列上放置唯一索引不会不允许任何欺骗吗?用户 1 可以有 1、7、9、17、22、25、29,而用户 2 可以有 1、7、9、17、22、25、30。只是所有 7 不能相同。 是的,创建多列唯一索引允许这样做。为了使插入失败,所有 7 列都必须与另一个条目相同。 有道理。订单呢? 1, 7, 9, 17, 22, 25, 29 和 7, 1, 9, 25, 22, 17, 29(相同的数字,不同的顺序)仍然会导致它失败吗? 是的,您需要确保这些值的顺序相同 - 但您最初将用户提交的内容放入数组并对其进行排序的建议可以轻松确保这种情况。【参考方案2】:

试试array_diff。 php.net 上有一些非常好的例子。

【讨论】:

以上是关于PHP:比较两组数字,没有欺骗的主要内容,如果未能解决你的问题,请参考以下文章

我如何(更)轻松地比较两组数字?

php 中有没有集合

急!!!C语言:输出两组数组中相同的数字

PHP驱动的API如何认证真正的客户端(referer)跨域(知道标头可以被欺骗)?

CTF-cookies欺骗

彩票插入排序算法