N次扩展关联数组并获得所有键组合

时间:2019-01-11 12:15:33

标签: php arrays

我正在尝试将关联数组扩展/相乘N次,并获得所有可能的组合键。

要手动执行两次,我会这样做:

  $copy = $array; 
  foreach ($array as $key1=>$tmp1) {  
   foreach ($copy as $key2=>$tmp2) {
    $combos[] = array($key1,$key2);
   }
  }

扩展三倍:

  $copy = $copy2 = $arr1;
  foreach ($arr1 as $key1=>$qd1) {  
   foreach ($copy as $key2=>$qd2) {
    foreach ($copy2 as $key3=>$qd3) {
     $combos[] = array($key1,$key2,$key3);
    }
   }
  }

这将是n次吗?如图所示,$ combos的每个元素都应具有n个元素。

我看了其他问题,但在这里并不太一样。

1 个答案:

答案 0 :(得分:2)

最后知道了:

$array = ['1' => [3, 4], '2' => [5, 6]];
$depth = 2;

function florg ($n, $elems) {
    if ($n > 0) {
      $tmp_set = array();
      $res = florg($n-1, $elems);
      foreach ($res as $ce) {
          foreach ($elems as $e) {
             array_push($tmp_set, $ce . $e);
          }
       }
       return $tmp_set;
    }
    else {
        return array('');
    }
}

$output = florg($depth, array_keys($array));

我所做的基本上是使用array_keys提取第一级键,然后借助https://stackoverflow.com/a/19067650/4585634创建所有可能的组合。

这是一个有效的演示:http://sandbox.onlinephpfunctions.com/code/94c74e7e275118cf7c7f2b7fa018635773482fd5

编辑:没有看到David Winder的评论,但这基本上是主意。