本文介绍了在 PHP 中查找数组的子集的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个带有属性 (A B C D) 的关系模式.我也有一组函数依赖项.

I have a Relational Schema with attributes (A B C D).I have a set of Functional Dependencies with me too.

现在我需要确定 R 属性的所有可能子集的闭包.这就是我被困的地方.我需要学习如何在 PHP 中查找子集(非重复).

Now I need to determine the closure for all the possible subsets of R's attributes. That's where I am stuck. I need to learn how to find subsets (non-repeating) in PHP.

我的数组是这样存储的.

My Array is stored like this.

$ATTRIBUTES = ('A', 'B', 'C', 'D').

所以我的子集应该是

$SUBSET = ('A', 'B', 'C', 'D', 'AB', 'AC', AD', 'BC', 'BD', 'CD', 'ABC', 'ABD', 'BCD', 'ABCD')

代码不应该是什么大东西,但出于某种原因我无法理解它.

The code shouldn't be something big but for some reason I can't get my head around it.

推荐答案

您希望 $attributes 的强大功能集?这就是你的问题所暗示的.

You wish for the power set of $attributes? That is what your question implies.

可以在此处找到一个示例(引用是为了完整性)

An example can be found here (quoted for completeness)

<?php
/**
* Returns the power set of a one dimensional array, a 2-D array.
* [a,b,c] -> [ [a], [b], [c], [a, b], [a, c], [b, c], [a, b, c] ]
*/
function powerSet($in,$minLength = 1) {
   $count = count($in);
   $members = pow(2,$count);
   $return = array();
   for ($i = 0; $i < $members; $i++) {
      $b = sprintf("%0".$count."b",$i);
      $out = array();
      for ($j = 0; $j < $count; $j++) {
         if ($b{$j} == '1') $out[] = $in[$j];
      }
      if (count($out) >= $minLength) {
         $return[] = $out;
      }
   }
   return $return;
}

这篇关于在 PHP 中查找数组的子集的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-20 10:28