分享一个递归计算笛卡尔积的方法
6

话不多说,先贴代码

namespace CarteSian;

class CarteSian
{

    /**
     * Store results
     *
     * @var array
     */
    public $products = [];

    /**
     * Calculate the Cartesian product
     *
     * @param array $params
     * @param array $temporary
     */
    public function carteSian(array $params, array $temporary = [])
    {
        foreach (
            array_shift($params) as $param
        ) {
            array_push($temporary, $param);
            $params ? $this->carteSian(
                $params, $temporary
            ) : array_push(
                $this->products, $temporary
            );
            array_pop($temporary);
        }
    }
}

使用

$cartSian = new CarteSian();

$params = [
   'Girls' => [
       '雾岛董香',
       '艾米莉娅',
       '结城明日奈',
   ],
   'Boys' => [
       '金木研',
       '菜月昴',
       '桐谷和人',
   ],
   'Hentais' => [
       '华城绫女',
       '培提尔其乌斯·罗马尼空提',
       '月山习',
   ]
];

$cartSian->carteSian($params);

print_r($cartSian->products);

输出结果

Array
(
   [0] => Array
       (
           [0] => 雾岛董香
           [1] => 金木研
           [2] => 华城绫女
       )

   [1] => Array
       (
           [0] => 雾岛董香
           [1] => 金木研
           [2] => 培提尔其乌斯·罗马尼空提
       )

   [2] => Array
       (
           [0] => 雾岛董香
           [1] => 金木研
           [2] => 月山习
       )

   [3] => Array
       (
           [0] => 雾岛董香
           [1] => 菜月昴
           [2] => 华城绫女
       )

   [4] => Array
       (
           [0] => 雾岛董香
           [1] => 菜月昴
           [2] => 培提尔其乌斯·罗马尼空提
       )

   [5] => Array
       (
           [0] => 雾岛董香
           [1] => 菜月昴
           [2] => 月山习
       )

   [6] => Array
       (
           [0] => 雾岛董香
           [1] => 桐谷和人
           [2] => 华城绫女
       )

   [7] => Array
       (
           [0] => 雾岛董香
           [1] => 桐谷和人
           [2] => 培提尔其乌斯·罗马尼空提
       )

   [8] => Array
       (
           [0] => 雾岛董香
           [1] => 桐谷和人
           [2] => 月山习
       )

   [9] => Array
       (
           [0] => 艾米莉娅
           [1] => 金木研
           [2] => 华城绫女
       )

   [10] => Array
       (
           [0] => 艾米莉娅
           [1] => 金木研
           [2] => 培提尔其乌斯·罗马尼空提
       )

   [11] => Array
       (
           [0] => 艾米莉娅
           [1] => 金木研
           [2] => 月山习
       )

   [12] => Array
       (
           [0] => 艾米莉娅
           [1] => 菜月昴
           [2] => 华城绫女
       )

   [13] => Array
       (
           [0] => 艾米莉娅
           [1] => 菜月昴
           [2] => 培提尔其乌斯·罗马尼空提
       )

   [14] => Array
       (
           [0] => 艾米莉娅
           [1] => 菜月昴
           [2] => 月山习
       )

   [15] => Array
       (
           [0] => 艾米莉娅
           [1] => 桐谷和人
           [2] => 华城绫女
       )

   [16] => Array
       (
           [0] => 艾米莉娅
           [1] => 桐谷和人
           [2] => 培提尔其乌斯·罗马尼空提
       )

   [17] => Array
       (
           [0] => 艾米莉娅
           [1] => 桐谷和人
           [2] => 月山习
       )

   [18] => Array
       (
           [0] => 结城明日奈
           [1] => 金木研
           [2] => 华城绫女
       )

   [19] => Array
       (
           [0] => 结城明日奈
           [1] => 金木研
           [2] => 培提尔其乌斯·罗马尼空提
       )

   [20] => Array
       (
           [0] => 结城明日奈
           [1] => 金木研
           [2] => 月山习
       )

   [21] => Array
       (
           [0] => 结城明日奈
           [1] => 菜月昴
           [2] => 华城绫女
       )

   [22] => Array
       (
           [0] => 结城明日奈
           [1] => 菜月昴
           [2] => 培提尔其乌斯·罗马尼空提
       )

   [23] => Array
       (
           [0] => 结城明日奈
           [1] => 菜月昴
           [2] => 月山习
       )

   [24] => Array
       (
           [0] => 结城明日奈
           [1] => 桐谷和人
           [2] => 华城绫女
       )

   [25] => Array
       (
           [0] => 结城明日奈
           [1] => 桐谷和人
           [2] => 培提尔其乌斯·罗马尼空提
       )

   [26] => Array
       (
           [0] => 结城明日奈
           [1] => 桐谷和人
           [2] => 月山习
       )

)

Github地址 Seaony/CarteSian

小菜鸟第一次发帖~,欢迎大家提出意见 ^ ^

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

  • 请注意单词拼写,以及中英文排版,参考此页
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
  • 支持表情,使用方法请见 Emoji 自动补全来咯,可用的 Emoji 请见 :metal: :point_right: Emoji 列表 :star: :sparkles:
  • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif
  • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
  请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!