我想写一个函数来创建数组列表的所有排列(列表是动态的)。现在我找到了两篇文章,http://dannyherran.com/2011/06/finding-unique-array-combinations-with-php-permutations/和Finding cartesian product with PHP associative arrays。但我不想将它们存储为多个数组,我希望将每个数组添加到每个可能性中,以便以后可以使用它们。
实际上,我想把每个数组相乘。
例如:
$array = array(
array(
1,
2
),
array(
'A',
'B',
'C'),
array(
'I',
'II')
);以这种形式:
Array
(
[0] => Array
(
[0] => 1
[1] => Array
(
[0] => Array
(
[0] => A
[1] => Array
(
[0] => I
[1] => II
)
)
[1] => Array
(
[0] => B
[1] => Array
(
[0] => I
[1] => II
)
)
[2] => Array
(
[0] => C
[1] => Array
(
[0] => I
[1] => II
)
)
)
)
[1] => Array
(
[0] => 2
[1] => Array
(
[0] => Array
(
[0] => A
[1] => Array
(
[0] => I
[1] => II
)
)
[1] => Array
(
[0] => B
[1] => Array
(
[0] => I
[1] => II
)
)
[2] => Array
(
[0] => C
[1] => Array
(
[0] => I
[1] => II
)
)
)
)
)我想这个大例子说明了我的问题。对于这种类型的数组,我创建了一个函数: foreach ($array1 as $value) { $return1[] =$return1($value,$array2);}
foreach ($array[0] as $value) {
$return[] = array($value, $return1);
}
print_r($return);现在,我想在递归函数中创建这个函数(因此它变得动态),但是我被卡住了。我想将数组的数量传递给函数,然后迭代。
function createTree($array, $loops=3){
$b = $array[$loops-2];
foreach ($b as $v) {
$return[] = array($v, createTree($return, $loops-1));
}
print_r($return);
}也许还有其他的解决方案可以让数组相乘呢?但是这个不是递归的函数对我来说很容易,但是它是递归的.
谢谢你的帮忙
发布于 2015-02-23 22:36:48
function createTree($array){
switch(count($array)) {
case 0:
die('Illegal argument.');
case 1:
return $array[0];
default:
$lastArray = array_pop($array);
$subArray = createTree($array);
foreach ($lastArray as $item) {
$return[] = array($item, $subArray);
}
return $return;
}
}
var_dump(createTree(array_reverse($array)));https://stackoverflow.com/questions/28683938
复制相似问题