【问题标题】:infinite array loop and combine with other array in loop [PHP]无限数组循环并与循环中的其他数组组合 [PHP]
【发布时间】:2022-01-01 22:33:54
【问题描述】:

首先,我不知道我的问题标题是否正确,如果我造成任何混淆,我很抱歉。

所以我有一组数组,我需要在树方法上组合成任何可能的新数组。

这是我的数组:

$layer = array(
                array(18,19,20,21,22),
                array(1,2,7,8,14),
                array(3,4,9,10,15),
                array(5,6,12,13,16),
                array(11),
                array(17)
            )

我期望将这些数组值组合成新的数组与树方法组合。

Array (
    [0] => 18-1-3-5-11-17
    [1] => 18-1-3-6-11-17
    [2] => 18-1-3-12-11-17
    [3] => 18-1-3-13-11-17
    [4] => 18-1-3-16-11-17
    [5] => 18-1-4-5-11-17
    [6] => 18-1-4-6-11-17
    [7] => 18-1-4-12-11-17
    ........
    ........
    ........
    [x] => 22-14-15-16-11-17
)

正如您在上面看到的,组合可能与数组值相互组合的数量一样多。

我可以很容易地将两个数组与下面的代码结合起来:

$i = 0;
$arr = array();

for ($x = 0; $x < count($layer_files[$i]); $x++) {
    for ($y = 0; $y < count($layer_files[($i + 1)]); $y++) {
        $arr[] = $layer_files[$i][$x] . '-' . $layer_files[($i + 1)][$y];
    }
}
$i++;

但是,我不知道如何像上面预期的那样组合两个以上的数组。

希望你能理解我想问的问题,谢谢你的帮助。

【问题讨论】:

    标签: php arrays


    【解决方案1】:

    你可以使用递归:

    function combinations($sets, $i=0) {
        if ($i >= count($sets)) return [[]];
        foreach($sets[$i] as $value) {
            foreach(combinations($sets, $i + 1) as $combi) {
                $results[] = [$value, ...$combi];
            }
        }
        return $results;
    }
    
    $matrix = combinations($layer);
    // Convert each combination to a string (using "-" separator)
    foreach($matrix as $combo) {
        $results[] = implode("-", $combo);
    }
    

    $results 将具有所需的结构。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多