请问关于排列的笛卡尔积 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 处理。研究了好久都解决不了,请问有遇到过类似问题的吗?

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
最佳答案
// 请问怎么样实现这样的效果?
$matrix = $collection->crossJoin($arr);
$matrix->all();

这种php新版本的语法

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

这种php新版本的语法

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

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

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

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