Ik probeer mij momenteel zoveel mogelijk te houden aan max 1 indentation level per method. Dit lukt aardig. Echter ben ik heel benieuwd of een bepaald stukje code ook naar 1 level kan zonder dat dit onnodig ingewikkeld word.
Het gaat om deze code:
Mijn eerste idee was array_fill.
Echter mis ik dan de datum want die kan je niet met array_fill toevoegen. Dan krijg je dus nog zoiets als onderstaande om de datum toe te voegen:
Maar dan heb ik weer 2 levels.
Hoe zou deze code teruggebracht kunnen worden naar 1 level? Nu heb ik het gevoel dat er een andere oplossing mogelijk is voor de nested array_walks. Maar geen idee hoe.
Het gaat om deze code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| protected function getDates($current_year, $past_year) {
$dates = [];
for ($year = $current_year; $year >= $past_year; $year--) {
$dates[$year] = [
'active' => false,
'months' => []
];
for ($month = 12; $month >= 1; $month--) {
$dates[$year]['months'][$month]['active'] = false;
$dates[$year]['months'][$month]['date'] = Carbon::create($year,$month,1,0,0,0);
}
}
return $dates;
} |
Mijn eerste idee was array_fill.
code:
1
2
3
4
5
6
7
| $dates = array_fill_keys(range($current_year,$past_year),[
'active' => false,
'months' => array_fill(1,12,[
'active' => false,
'date' => null
])
]); |
Echter mis ik dan de datum want die kan je niet met array_fill toevoegen. Dan krijg je dus nog zoiets als onderstaande om de datum toe te voegen:
code:
1
2
3
4
5
| array_walk($dates,function(&$date,$year) {
array_walk($date['months'], function (&$month_data, $month) use ($year){
$month_data['date'] = Carbon::create($year,$month,1,0,0,0);
});
}); |
Maar dan heb ik weer 2 levels.
Hoe zou deze code teruggebracht kunnen worden naar 1 level? Nu heb ik het gevoel dat er een andere oplossing mogelijk is voor de nested array_walks. Maar geen idee hoe.
PSN jschut_82 | Xbox: JSchut82