【问题标题】:php array merge recursive with same array values and create combinationsphp数组合并递归与相同的数组值并创建组合
【发布时间】:2017-11-06 18:16:22
【问题描述】:

你好,我是 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 级,帮助将不胜感激。

【问题讨论】:

  • 你的问题至少太宽泛了没有尝试......
  • 你有更小的例子和输出数组吗?您还会提供创建输出数组的方法吗?从您的示例中并不明显。
  • @bassxzero 我想要每个数组的第一个元素,例如,如果您看到 5,4 和 3 是常见的,那么基于此再次循环检查每个元素,并再次在 5,4 和 3 下找到常见的元素构造数组..
  • @FirstOne,我尝试使用 array_shift 构造数组,然后基于第一个元素尝试再次检查每个元素,但它的工作只有 2 级,所以我以 3 级数组为例并输出..

标签: php arrays recursion combinations


【解决方案1】:

不确定我是否理解正确,因为示例没有清楚地解释,但我以某种方式能够打印所需的输出。通过 cmets 给出的解释

// 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);

【讨论】:

  • 嗨@erwin 感谢帮助它正是我想要的:) 但代码仅限于三个值.. 数组可能有 4 个值或更多值..
  • 您的意思是输入数组可以有 4 个键/值?你能举个例子,比如说4个值吗? :)
【解决方案2】:

要适应具有多个第一级元素的情况,请使用循环。使用另一个循环来迭代每个条目。您甚至可以在嵌套的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);

无需声明/分配父键即可将数据附加到其中。我的sn-p中故意没有条件。

【讨论】:

    猜你喜欢
    • 2017-07-19
    • 1970-01-01
    • 2021-10-22
    • 1970-01-01
    • 1970-01-01
    • 2014-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多