php数组使用相同的数组值合并递归并创建组合

php数组使用相同的数组值合并递归并创建组合,php,arrays,recursion,combinations,Php,Arrays,Recursion,Combinations,您好,我是php新手,我只是停留在头脑风暴数组中,下面是php数组 [0] => Array ( [0] => Array ( [1] => 5 [2] => 12 [11] => 15 ) [1] => Array (

您好,我是php新手,我只是停留在头脑风暴数组中,下面是php数组

[0] => Array
    (
        [0] => Array
            (
                [1] => 5
                [2] => 12
                [11] => 15
            )

        [1] => Array
            (
                [1] => 5
                [2] => 12
                [11] => 16
            )

        [2] => Array
            (
                [1] => 4
                [2] => 9
                [11] => 15
            )

        [3] => Array
            (
                [1] => 3
                [2] => 9
                [11] => 15
            )

        [4] => Array
            (
                [1] => 3
                [2] => 9
                [11] => 16
            )

        [5] => Array
            (
                [1] => 3
                [2] => 13
                [11] => 15
            )

        [6] => Array
            (
                [1] => 3
                [2] => 13
                [11] => 16
            )

        [7] => Array
            (
                [1] => 3
                [2] => 12
                [11] => 15
            )

        [8] => Array
            (
                [1] => 3
                [2] => 12
                [11] => 16
            )

        [9] => Array
            (
                [1] => 4
                [2] => 9
                [11] => 16
            )

        [10] => Array
            (
                [1] => 4
                [2] => 13
                [11] => 15
            )

        [11] => Array
            (
                [1] => 4
                [2] => 13
                [11] => 16
            )

        [12] => Array
            (
                [1] => 4
                [2] => 12
                [11] => 15
            )

        [13] => Array
            (
                [1] => 4
                [2] => 12
                [11] => 16
            )

        [14] => Array
            (
                [1] => 5
                [2] => 9
                [11] => 15
            )

        [15] => Array
            (
                [1] => 5
                [2] => 13
                [11] => 16
            )

    )
我要把下面的东西放出去

[0]=> Array
(
    [5]=> Array
    (
        [12]=> Array
        (
            [0] => 15
            [1] => 16
        )
        [9]=> Array
        (
            [0] => 15
        )
        [13]=> Array
        (
            [0] => 16
        )
    )
    [4]=> Array
    (
        [9]=> Array
        (
            [0] => 15
            [1] => 16
        )
        [13]=> Array
        (
            [0] => 16
        )
        [12]=> Array
        (
            [0] => 15
            [1] => 16
        )
    )
    [3]=> Array
    (
        [9]=> Array
        (
            [0] => 15
            [1] => 16 
        )
        [13]=> Array
        (
            [0] => 15
            [1] => 16
        )
        [12]=> Array
        (
            [0] => 15
            [1] => 16

        )
    )
)
对不起,放不太清楚,但我想先检查每个数组的公共值,例如5、4和3,然后根据这些值遍历每个值并创建树数组 作为一个简单的例子,我希望每个数组首先包含元素,然后递归地检查数组值并创建新的数组
示例只有3个级别,但我需要递归n级,如果您能提供帮助,将不胜感激

不确定我是否理解正确,因为样本没有解释清楚,但我不知怎么地能够打印出所需的输出。通过评论给出的解释

// I just simplified your given array
$input[0] = array(
    [1 => 5, 2 => 12, 11 => 15],
    [1 => 5, 2 => 12, 11 => 16],
    [1 => 4, 2 =>  9, 11 => 15],
    [1 => 3, 2 =>  9, 11 => 15],
    [1 => 3, 2 =>  9, 11 => 16],
    [1 => 3, 2 => 13, 11 => 15],
    [1 => 3, 2 => 13, 11 => 16],
    [1 => 3, 2 => 12, 11 => 15],
    [1 => 3, 2 => 12, 11 => 16],
    [1 => 4, 2 =>  9, 11 => 16],
    [1 => 4, 2 => 13, 11 => 15],
    [1 => 4, 2 => 13, 11 => 16],
    [1 => 4, 2 => 12, 11 => 15],
    [1 => 4, 2 => 12, 11 => 16],
    [1 => 5, 2 =>  9, 11 => 15],
    [1 => 5, 2 => 13, 11 => 16]
);

// Declare new output array
$output[0] = [];

// Loop thru each array inside $input[0] array
foreach($input[0] as $key => $value) {

    // Set each array value to variables
    $one = $value[1];
    $two = $value[2];
    $eleven = $value[11];

    // Check if $one key already exist, create if not
    if (!isset($output[0][$one])) {
            $output[0][$one] = [];
    }

    // Check if $two key already exist, create if not
    if (!isset($output[$one][$two])) {
            $output[0][$one][$two] = [];
    }

    // push each $eleven
    $output[0][$one][$two][] = $eleven;
};

// Prints output array
echo '<pre>';
print_r($output);
//我刚刚简化了给定的数组
$input[0]=数组(
[1 => 5, 2 => 12, 11 => 15],
[1 => 5, 2 => 12, 11 => 16],
[1 => 4, 2 =>  9, 11 => 15],
[1 => 3, 2 =>  9, 11 => 15],
[1 => 3, 2 =>  9, 11 => 16],
[1 => 3, 2 => 13, 11 => 15],
[1 => 3, 2 => 13, 11 => 16],
[1 => 3, 2 => 12, 11 => 15],
[1 => 3, 2 => 12, 11 => 16],
[1 => 4, 2 =>  9, 11 => 16],
[1 => 4, 2 => 13, 11 => 15],
[1 => 4, 2 => 13, 11 => 16],
[1 => 4, 2 => 12, 11 => 15],
[1 => 4, 2 => 12, 11 => 16],
[1 => 5, 2 =>  9, 11 => 15],
[1 => 5, 2 => 13, 11 => 16]
);
//声明新的输出数组
$output[0]=[];
//循环通过$input[0]数组内的每个数组
foreach($key=>$value形式的输入[0]{
//将每个数组值设置为变量
$one=$value[1];
$two=$value[2];
$11=$value[11];
//检查$one键是否已存在,如果不存在,请创建
如果(!isset($output[0][$one])){
$output[0][$one]=[];
}
//检查$two键是否已存在,如果不存在,则创建
如果(!isset($output[$one][$two])){
$output[0][$one][$two]=[];
}
//每个推11美元
$output[0][$1][$2][]=$11;
};
//打印输出阵列
回声';
打印(输出);

如果不尝试,您的问题至少太宽泛了……您有更小的示例和输出数组吗?您是否还会提供创建输出阵列的方法?从你的例子中不明显。@bassxzero我想要每个数组的第一个元素,例如,如果你看到5,4和3是公共的,那么基于这个,再次循环检查每个元素,在5,4和3下找到公共的,然后构造数组。@FirstOne,我尝试使用array_shift构造数组,然后基于第一个元素尝试再次检查每个元素,但其工作仅为2级,因此我示例了3级数组并输出..Hi@erwin感谢您的帮助,这正是我想要的:)但代码仅限于三个值。。数组可能有4个或更多值。您的意思是输入数组可能有4个键/值?你能举个例子,比如说4个值吗?:)