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"
      }
    }
    */
  • 相关阅读:
    nginx解决前端跨域配置
    oracle 空表处理
    (转)Oracle修改表空间为自动扩展
    使用silverlight自定义控件时“给定关键字不在字典中”
    arcengine note:
    Jquery CSS 操作
    Jquery Easy-UI 树形菜单的运用
    Easy-UI data-options总结
    数据库 存储过程初探
    ASP.NET 日志的记录(登录日志和异常日志和操作日志)
  • 原文地址:https://www.cnblogs.com/helin/p/4081921.html
Copyright © 2011-2022 走看看