计算PHP的所有数字组合

时间:2014-08-12 14:55:40

标签: php statistics

我的表格中包含5个以逗号分隔的数字。示例:5, 12, 88, 155, 201,。 共有10000+ rows。我需要一种方法来计算现有表中每对的计数。

规则:

  • 同一记录中不能存在相同的号码,所有号码在1条记录中都是唯一的
  • 数字始终按升序排序并保存
  • 最大数量为255
  • 最小数字为1

我需要知道数字5 & 12一起显示的次数或数字88 & 155或数字5 & 155的数量。

我认为我可以做的一种方法是使用双循环,但似乎很慢,并且不会真正适用于三重组合或四个最常见的数字。

我的代码:

for ($i = 1; $i <= 255; $i++) {
   for ($j = 1; $j <= 255; $j++) {
      // two numbers cant exist in same record
      if ($i === $j) continue;

      $total = $this->db->getTotalNumFrequencies($i, $j);
   }
}

示例记录:

记录1:5, 12, 88, 155, 201,

记录2:1, 5, 55, 88, 255,

记录3:1,55, 99, 151, 191,

示例输出:

组合1:5, 88,计数:2,显示在记录中:1, 2

组合1:1, 55,计数:2,显示在记录中:2, 3

现在此代码可以正常工作以获得2个数字组合计数。如何在不使用嵌套循环的情况下获得3, 4 & 5个数字组合?有办法吗?

1 个答案:

答案 0 :(得分:0)

在您的情况下使用的示例数据模型,它将支持基于SQL的方法而不是循环:

CREATE TABLE `thingtable` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 PRIMARY KEY (`id`)
)

CREATE TABLE `thing_numbers` (
 `thing_id` int(11) NOT NULL,
 `numberval` int(11) NOT NULL
)



INSERT INTO `thing_numbers` (`thing_id`, `numberval`) VALUES
(1, 5),
(1, 12),
(2, 5),
(2, 13);

SELECT COUNT(thing_id), thing_id FROM `thing_numbers` WHERE numberval IN (5,12) GROUP BY thing_id 
/*will show
 COUNT(thing_id)    thing_id    
 2                      1
 1                      2
 */