请问关于排列的笛卡尔积 crossJoin 的使用

这个是关于 crossJoin 的使用。如果是确切知道数组的值,使用肯定是没有问题:

$collection = collect([1, 2]);
$matrix = $collection->crossJoin(['a', 'b'], ['I', 'II']);
$matrix->all();
/*
    [
        [1, 'a', 'I'],
        [1, 'a', 'II'],
        [1, 'b', 'I'],
        [1, 'b', 'II'],
        [2, 'a', 'I'],
        [2, 'a', 'II'],
        [2, 'b', 'I'],
        [2, 'b', 'II'],
    ]
*/

但是,如果要使用crossJoin的是一个不确切的数据,如:

$collection = collect([1, 2]);
$arr = [
    [2, 3],
    ['a', 1],
    ['b', 'c']
    ……
]
// 请问怎么样实现这样的效果?
$matrix = $collection->crossJoin([2, 3], ['a', 1], ['b', 'c'], ……);
$matrix->all();

其实就是怎么把 $arr 做拼接进行 crossJoin 处理。研究了好久都解决不了,请问有遇到过类似问题的吗?

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
最佳答案
// 请问怎么样实现这样的效果?
$matrix = $collection->crossJoin($arr);
$matrix->all();

这种php新版本的语法

4年前 评论
LiamHao 4年前
Adachi 4年前
LiamHao 4年前
夜游人 (楼主) 4年前
夜游人 (楼主) 4年前
Adachi 4年前
讨论数量: 3
// 请问怎么样实现这样的效果?
$matrix = $collection->crossJoin($arr);
$matrix->all();

这种php新版本的语法

4年前 评论
LiamHao 4年前
Adachi 4年前
LiamHao 4年前
夜游人 (楼主) 4年前
夜游人 (楼主) 4年前
Adachi 4年前

这个系列好像有新函数,记不清了,你自己翻翻吧,反正这个也能用。

$collection = collect([1, 2]);
$data = [['a', 'b'], ['I', 'II']];
$matrix = call_user_func_array([$collection, 'crossJoin'], $data);
//        $matrix = $collection->crossJoin();
return $matrix->all();
4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!