zoukankan      html  css  js  c++  java
  • 多数组求笛卡尔积

    /*--------------------------------------
     *+多数组求笛卡尔积
     *--------------------------------------
     */
      笛卡尔(Descartes)乘积又叫直积。设A、B是任意两个集合,在集合A中任意取一个元素x,在集合B中任意取一个元素y,组成一个有序对(x,y),把这样的有序对作为新的元素,他们的全体组成的集合称为集合A和集合B的直积,记为A×B,即A×B={(x,y)|x∈A且y∈B}。

    function Descartes() {
        $t = func_get_args();
        if(func_num_args() == 1){
            return call_user_func_array( __FUNCTION__, $t[0] );
        }
        $a = array_shift($t);
        if(! is_array($a)){
            $a = array($a);
        }
        $a = array_chunk($a, 1);
        do {
            $r = array();
            $b = array_shift($t);
            if(! is_array($b)){
                $b = array($b);
            }
            foreach($a as $p){
                foreach(array_chunk($b, 1) as $q){
                    $r[] = array_merge($p, $q);
                }
            }
            $a = $r;
        }while($t);
        
        return $r;
    }
    
    //示例
    $arr = array(
        array('a1','a2','a3'),
        'b',
        array('c1','c2'),
        array('d1','d2','d3'),
        //......省略其它元素(也可以是数组),
    );
    $r = Descartes( $arr );
    
    var_dump($r);exit;
    /*array(18) {
      [0]=>
      array(4) {
        [0]=>
        string(2) "a1"
        [1]=>
        string(1) "b"
        [2]=>
        string(2) "c1"
        [3]=>
        string(2) "d1"
      }
      [1]=>
      array(4) {
        [0]=>
        string(2) "a1"
        [1]=>
        string(1) "b"
        [2]=>
        string(2) "c1"
        [3]=>
        string(2) "d2"
      }
      [2]=>
      array(4) {
        [0]=>
        string(2) "a1"
        [1]=>
        string(1) "b"
        [2]=>
        string(2) "c1"
        [3]=>
        string(2) "d3"
      }
      [3]=>
      array(4) {
        [0]=>
        string(2) "a1"
        [1]=>
        string(1) "b"
        [2]=>
        string(2) "c2"
        [3]=>
        string(2) "d1"
      }
      [4]=>
      array(4) {
        [0]=>
        string(2) "a1"
        [1]=>
        string(1) "b"
        [2]=>
        string(2) "c2"
        [3]=>
        string(2) "d2"
      }
      [5]=>
      array(4) {
        [0]=>
        string(2) "a1"
        [1]=>
        string(1) "b"
        [2]=>
        string(2) "c2"
        [3]=>
        string(2) "d3"
      }
      [6]=>
      array(4) {
        [0]=>
        string(2) "a2"
        [1]=>
        string(1) "b"
        [2]=>
        string(2) "c1"
        [3]=>
        string(2) "d1"
      }
      [7]=>
      array(4) {
        [0]=>
        string(2) "a2"
        [1]=>
        string(1) "b"
        [2]=>
        string(2) "c1"
        [3]=>
        string(2) "d2"
      }
      [8]=>
      array(4) {
        [0]=>
        string(2) "a2"
        [1]=>
        string(1) "b"
        [2]=>
        string(2) "c1"
        [3]=>
        string(2) "d3"
      }
      [9]=>
      array(4) {
        [0]=>
        string(2) "a2"
        [1]=>
        string(1) "b"
        [2]=>
        string(2) "c2"
        [3]=>
        string(2) "d1"
      }
      [10]=>
      array(4) {
        [0]=>
        string(2) "a2"
        [1]=>
        string(1) "b"
        [2]=>
        string(2) "c2"
        [3]=>
        string(2) "d2"
      }
      [11]=>
      array(4) {
        [0]=>
        string(2) "a2"
        [1]=>
        string(1) "b"
        [2]=>
        string(2) "c2"
        [3]=>
        string(2) "d3"
      }
      [12]=>
      array(4) {
        [0]=>
        string(2) "a3"
        [1]=>
        string(1) "b"
        [2]=>
        string(2) "c1"
        [3]=>
        string(2) "d1"
      }
      [13]=>
      array(4) {
        [0]=>
        string(2) "a3"
        [1]=>
        string(1) "b"
        [2]=>
        string(2) "c1"
        [3]=>
        string(2) "d2"
      }
      [14]=>
      array(4) {
        [0]=>
        string(2) "a3"
        [1]=>
        string(1) "b"
        [2]=>
        string(2) "c1"
        [3]=>
        string(2) "d3"
      }
      [15]=>
      array(4) {
        [0]=>
        string(2) "a3"
        [1]=>
        string(1) "b"
        [2]=>
        string(2) "c2"
        [3]=>
        string(2) "d1"
      }
      [16]=>
      array(4) {
        [0]=>
        string(2) "a3"
        [1]=>
        string(1) "b"
        [2]=>
        string(2) "c2"
        [3]=>
        string(2) "d2"
      }
      [17]=>
      array(4) {
        [0]=>
        string(2) "a3"
        [1]=>
        string(1) "b"
        [2]=>
        string(2) "c2"
        [3]=>
        string(2) "d3"
      }
    }
    */
  • 相关阅读:
    MyBatis环境配置
    log4j配置不同的类多个日志文件
    Http协议头、代理
    Apache二级域名实现
    Flash Builder 4.7 完美破解
    网页设计方面,哪些中英文字体的组合能有好的视觉效果
    网页设计中最常用的字体
    sublime text 3 插件:package control
    大量实用工具类、开源包,该帖绝对值得你收藏!
    10个简化Web开发者工作的HTML5开发工具
  • 原文地址:https://www.cnblogs.com/helin/p/4081921.html
Copyright © 2011-2022 走看看