我正在尝试将关联数组扩展/相乘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个元素。
我看了其他问题,但在这里并不太一样。
答案 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的评论,但这基本上是主意。