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