编写这种(故意简化的)代码是否有一种更具声明性/不太可怕的方式?
我知道我可以使用->each()
,但是在这种情况下仍然不能摆脱嵌套吗?
请注意,我确实需要来生成所有组合,并且我需要混合使用各种东西-配置数据,普通数组,口才,尽管显然我可以首先将它们转换...
foreach(config('app.goals') as $goal) {
foreach(config('app.age_groups') as $ages) {
foreach($regions as $region_name => $region_id) {
foreach($interests->pluck('name')->prepend('') as $interest) {
foreach(config('app.devices') as $device) {
$record = new Foo();
$record->goal = $goal;
$record->age = $age;
$record->region = $region_id;
$record->interest = $interest;
$record->device = $device;
$record->save();
}
}
}
}
}
不清楚是否有可以帮助您的Collection方法?例如
holygrail(config('app.goals'),config('app.age_groups'),$regions...)->each(function($combination) {
// logic for every combination
});
答案 0 :(得分:0)
crossJoin()似乎可以满足我的需求,它创建了每个组合的数组矩阵。
$matrix = collect($goals)->crossJoin(
$ages,
$regions,
$interests,
$devices
);
因此,您有一个由元素组成的数组,每个元素都有一个排列,例如:
array(5) {
[0]=>
string(5) "REACH"
[1]=>
string(5) "18-65"
[2]=>
string(9) "Worldwide"
[3]=>
string(11) "Programming"
[4]=>
string(7) "desktop"
}
Laravel源位于:\ Illuminate \ Support \ Arr :: crossJoin