doupang4126 2014-04-28 11:52
浏览 497
已采纳

Foreach循环+递归

I am trying to put this code in a more flexible manner so it can work whatever the size of $sets array is. I suppose it can be done with recursion but cannot find the correct php syntax.

$sets = array(
                array(0, 1, 2, 3),
                array(0, 1, 2, 3),
                array(0, 1, 2, 3),
                array(0, 1, 2, 3)
                );

$combinations = array();

foreach($sets[0] as $s1)
    foreach($sets[1] as $s2)
        foreach($sets[2] as $s3)
            foreach($sets[3] as $s4)
                $combinations[] = array($s1, $s2, $s3, $s4);

print_r($combinations);
  • 写回答

1条回答 默认 最新

  • drmy1050 2014-04-28 12:32
    关注

    You can do it in recursion like this. The output is identical to your loops

    <?php
    $sets = array(
        array(0, 1, 2, 3),
        array(0, 1, 2, 3),
        array(0, 1, 2, 3),
        array(0, 1, 2, 3)
    );
    
    function get_combinations($sets, &$combinations = array(), &$row = array()) {
        if (count($sets) == 0) {
            $combinations[] = $row;
            return $combinations;
        }
        foreach ($sets[0] as $s) {
            $row[] = $s;
            get_combinations(array_slice($sets, 1), $combinations, $row);
            array_pop($row);
        }
        return $combinations;
    }
    
    $combinations = get_combinations($sets);
    
    print_r($combinations);
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 LiBeAs的带隙等于0.997eV,计算阴离子的N和P
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 来真人,不要ai!matlab有关常微分方程的问题求解决,
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算