检测多维数组中的新排列

时间:2015-02-24 01:27:48

标签: php arrays recursion multidimensional-array

在我们的数据库中,我们有一个表,它是三个表中每个排列的结果。

我试图编写一个PHP脚本,将所有这些表视为数组并检测是否存在缺失的排列。

e.g。

$foo = array('one', 'two', NULL)
$bar = array('three', 'four', NULL)
$baz = array('five', 'six', NULL)

$permutations = array(
  array('one', 'three', 'five'),
  array('two', 'three', 'five'),
  array(NULL, 'three', 'five'),
  //etc
)

foreach $foo as $x
  foreach $bar as $y
    foreach $baz as $z
      $combo = array($x, $y, $z)
      if $combo is not in $permutations
         //generate sql to update db

我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:2)

您必须使用MySQL检索每个可能的排列并在第4个表上使用LEFT JOIN并测试是否没有匹配

如果你有3个表t1,t2,t3包含一列“value”,表t4是“排列”,其中包含三列t1,t2和t3,你可以得到不存在的“置换”以下查询

SELECT t1.value v1, t2.value v2, t3.value v3
FROM t1, t2, t3
LEFT JOIN t4 ON t4.t1=v1 AND t4.t2=v2 AND t4.t3=v3
WHERE t4.t1 IS NULL;

您可以调整此查询以匹配数据库架构。

答案 1 :(得分:0)

我完全不知道你试图做什么,但我建议:

$foo = array('one', 'two', NULL);
$bar = array('three', 'four', NULL);
$baz = array('five', 'six', NULL);

$permutations = array(
  array('one', 'three', 'five'),
  array('two', 'three', 'five'),
  array(NULL, 'three', 'five'),
  //etc
);

$foobarbaz = array_merge($foo, $bar, $baz);
foreach($foobarbaz as $k){ 
  if(!in_array($k, $permutations) {
     $sql_trigger_start();
  }
}

遇到此问题的一个例子。 http://dannyherran.com/2011/06/finding-unique-array-combinations-with-php-permutations/