笛卡尔乘积

笛卡尔积

递归笛卡尔积算法

支持多数组组合

 /**
     * 递归笛卡尔积
     * @param $value_list = array:2 [
  60008 => array:5 [
    10010 => array:5 [
      "id" => 32
      "attr_type" => 60008
      "attr_name" => "体系VIP"
      "menu" => "10010"
      "created_at" => "2020-05-07 17:58:19"
    ]
    10020 => array:5 [
      "id" => 33
      "attr_type" => 60008
      "attr_name" => "体系普通"
      "menu" => "10020"
      "created_at" => "2020-05-07 17:58:37"
    ]
    10030 => array:5 [
      "id" => 34
      "attr_type" => 60008
      "attr_name" => "项目会员"
      "menu" => "10030"
      "created_at" => "2020-05-07 17:58:51"
    ]
    10040 => array:5 [
      "id" => 35
      "attr_type" => 60008
      "attr_name" => "云会员"
      "menu" => "10040"
      "created_at" => "2020-05-07 17:59:06"
    ]
    10090 => array:5 [
      "id" => 36
      "attr_type" => 60008
      "attr_name" => "非会员"
      "menu" => "10090"
      "created_at" => "2020-05-07 17:59:24"
    ]
  ]
  60009 => array:4 [
    1 => array:5 [
      "id" => 37
      "attr_type" => 60009
      "attr_name" => "0.5年(半年)"
      "menu" => "1"
      "created_at" => "2020-05-07 18:07:55"
    ]
    2 => array:5 [
      "id" => 38
      "attr_type" => 60009
      "attr_name" => "1年(普通一年)"
      "menu" => "2"
      "created_at" => "2020-05-07 18:08:11"
    ]
    3 => array:5 [
      "id" => 39
      "attr_type" => 60009
      "attr_name" => "2.5年 (买两年送半年)"
      "menu" => "3"
      "created_at" => "2020-05-07 18:08:40"
    ]
    4 => array:5 [
      "id" => 40
      "attr_type" => 60009
      "attr_name" => "4年 (买三送一)"
      "menu" => "4"
      "created_at" => "2020-05-07 18:08:54"
    ]
  ]
]
     * @param $data =[]
     * @return array
     */
    public function cartesian($value_list,$data){
        //去除第一个元素
        $first = array_shift($value_list);

        //判断是否是第一次进行拼接
        if (count($data)>1){
            foreach ($data as $key=>$value){
                foreach ($first as $ke=>$va){
                    $data2[] = $value.','.$va['id'];
                }
            }
        }else{
            foreach ($first as $key=>$value){
                $data2[] = $value['id'];
            }
        }
        //递归进行拼接
        if(count($value_list) > 0){
            $data2 = $this->cartesian($value_list,$data2);
        }
        //返回最终笛卡尔积
        return $data2??[];
    }

组合的结果集为:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值