PHP 多个一维数组排列组合的所有可能

<?php
    // auth bin.chen 525945448

    $a = array(‘A‘,‘B‘,‘Y‘);
    $b = array(‘C‘,‘D‘,‘P‘);
    $c = array(‘E‘,‘F‘,‘G‘);
    $f = array(‘P‘,‘U‘,‘M‘);
    $d = array($a,$b,$c,$f );
    //计算每一个数组的长度
    $len = 1;
    $arrLen = count($d); //需要排列数组有多少个
    $recIndex = null; //记录当前该取的位置
    foreach ($d as $key => $value) {
        $lenRec[] = count($value);
        $len = $lenRec[$key]*$len;
        $recIndex[] = 0;//第一次全部取第0个
    }
    //算出% 的值
    $count = 1;
    foreach ($lenRec as $key => $value) {
        $moduloVal = 1;

        if($arrLen == $count){
                $modulo[] = count($d[$arrLen-1]); //等于最后一个的长度
        }else{
            $count_1 = 1;
            foreach ($lenRec as $index => $item) {
                $count_1 > $count && $moduloVal = $moduloVal*$item;
                $count_1 ++;
            }
            $modulo[] = $moduloVal;
        }
        $count ++;//为了防止$d key是有值的 不是自然序列 需要计数
    }
    $i = 1;

    while ( $i <= $len) {
        $html = ‘‘;
        $count_2 = 0;// 取模
        $temp = ‘‘;
        foreach ($d as $value) {
               $html .= $value[$recIndex[$count_2]%$lenRec[$count_2]];
               $count_2 ++;
        }

        echo $html."<br>";
        foreach ($modulo as $key => $value) {
            if($i%$value == 0 && $key < $arrLen - 1 ){
                $recIndex[$key] = $recIndex[$key] +1;
            }
            if($key == $arrLen - 1){
                 if($i%$value == 0){
                        $recIndex[$key] = 0;
                 }else{
                    $recIndex[$key] = $recIndex[$key] +1;
                 }
            }
        }
        $i ++;
        //改变获取的位置
    }

?>
时间: 2024-07-28 23:11:12

PHP 多个一维数组排列组合的所有可能的相关文章

JavaScript 二维数组排列组合2

<html> <head> <title>二维数组排列组合</title> </head> <body> <div id="showDiv"></div> </body> <script type="text/javascript"> var arrays = [ [ '1-1-雨尘', '1-2-芸芸', '1-3-简一', '1-4-乐乐' ]

数组排列组合(多用与属性组合)

初始的数组 想要的结果 代码实现 $data=[];//换成你自己的原始数据数组如第一个图所示的格式. $arr=[]; $clone=[]; $i=0; foreach($data as $k=>$v){ if($i<=0){ $clone=$v; echo $i; $i++; }else{ foreach($v as $kk=>$vv){ foreach($clone as $kkk=>$vvv){ $arr[]=$vv.$vvv; } } $clone=$arr; //此处要

JavaScript 递归法排列组合二维数组2

<html> <head> <title>二维数组排列组合</title> </head> <body> <div id="showDiv"></div> </body> <script type="text/javascript"> var arrays = [ [ '1-1-雨尘', '1-2-芸芸', '1-3-简一', '1-4-乐乐' ]

JavaScript 递归法排列组合二维数组

<html> <head> <title>二维数组排列组合</title> </head> <body> <div id="showDiv"></div> </body> <script type="text/javascript"> var arrays = [ [ '1-1-雨尘', '1-2-芸芸', '1-3-简一', '1-4-乐乐' ]

js多个(N)个数组的的元素组合排序算法,多维数组的排列组合或多个数组之间的排列组合

现在有一批手机,其中颜色有['白色','黑色','金色','粉红色']:内存大小有['16G','32G','64G','128G'],版本有['移动','联通','电信'],要求写一个算法,实现[['白色','16G','移动'], ['白色','16G','联通'] ...]这样的组合,扩张,如果后面还有参数,比如再加一个['国行','港版','美版'],不改程序一样可以执行! 通过上面规律可以发现这个算法就是:一个数组里面包含若干个数组,进行组合 算法代码写法一: // 执行组合排列的函数

js 排列 组合 的一个简单例子

最近工作项目需要用到js排列组合,于是就写了一个简单的demo. 前几天在网上找到一个写全排列A(n,n)的code感觉还可以,于是贴出来了, 排列的实现方式: 全排列主要用到的是递归和数组的插入 比如12的全排列,首先把1拿出来放到elementCur,再获取由1组成的数组[2],然后在循环把1插入到0,1的位置后再返回1,2][2,1] 如果是123那么首先获取23的全排列[2,3][3,2],然后在插入1,[1,2,3][2,1,3][2,3,1][1,3,2][3,1,2][3,2,1]

输出所有排列组合

本文预先假定您对递归的思想有较深入的认识,所以没有写太多细碎的注释,至于为什么要那个样子递归调用,相信独立看懂您会大有收获的.本文更重要的是列出基本思想,并且通过两个算法的对比揭示排列和组合的内在联系,有疑问的朋友们可以留言跟我交流 a1,a2,...,an.求输出这n个数中任取m个的排列及组合序列. 1 #include <iostream> 2 3 struct Element 4 { 5 int num; 6 bool bUsed;//标记num是否已被选取 7 }; 8 9 //本算法

排列组合问题之圆形分布

1.问题1.1 团团坐有一张圆桌,坐了A,B,C,D四个人,已知,D在A的右边,C在D的对面,请问A,B,C,D,的坐次? 解答:这个问题相对简单,我们纸上画一画,就能画出他们的可能的位置了 但是,可能还有一种解,比如我们把A,B,C,D依次右转一个位,也是满足条件的,而且只要保持他们的相对位置不变,依次右转n个位都是问题的解,而且还有个有趣的事情,当他们转了一圈(即右转4个位)后,他们右回到原位了 2.圆形分布上面这个问题就是一种圆形分布,那么他和直线分布的区别在哪里呢?又有什么联系呢?上面文

用递归写排列组合问题

最近递归弄的人头疼,但是这两天看过来也稍微总结了一些不能称得上是技巧的技巧吧 问题如下,将1,2,3,4这四个数字排列组合的输出来,看网上有个很二的方法吧,就是将10000以内的数全部输出再筛选,对此有点无语,但是程序倒是挺好编的,嘿嘿 回归到正题中,用递归的思想解决 (1)采用旋转数字的方法,当步长为1时,1234还是1234,步长为2的时候,1234可以变为1243.1324...,步长为3 的时候,1234可以变为1423,诸如此类,最重要的能体现递归的就是将每次递归一次的数字还可以接着旋