代码之家  ›  专栏  ›  技术社区  ›  KennyS

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

  •  -2
  • KennyS  · 技术社区  · 7 年前

    您好,我是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级,如果能提供帮助,将不胜感激。

    2 回复  |  直到 7 年前
        1
  •  1
  •   Goma Niharikaa    7 年前

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

    // 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);
    
        2
  •  0
  •   mickmackusa Tom Green    3 年前

    为了适应具有多个第一级元素的情况,请使用循环。使用另一个循环迭代每个条目。甚至可以在嵌套 foreach() 声明变量。

    代码:( Demo

    $result = [];
    foreach ($input as $key => $array) {
        foreach ($array as [1 => $one, 2 => $two, 11 => $eleven]) {
            $result[$key][$one][$two][] = $eleven;
        }
    }
    var_export($result);
    

    不需要声明/分配父键来将数据附加到其中。我的代码片段中故意没有任何条件。