@@ -81,26 +81,44 @@ public function compileParameters($console = false)
81
81
preg_match_all ($ regex , $ this ->parameters , $ matches , PREG_SET_ORDER , 0 );
82
82
83
83
$ argument_index = 0 ;
84
- $ parameters = collect ($ matches )->mapWithKeys (function ($ parameter ) use ($ console , &$ argument_index ) {
84
+
85
+ $ duplicate_parameter_index = function (array $ carry , array $ param , string $ trimmed_param ) {
86
+ if (! isset ($ carry [$ param [0 ]])) {
87
+ $ carry [$ param [0 ]] = $ trimmed_param ;
88
+ } else {
89
+ if (! is_array ($ carry [$ param [0 ]])) {
90
+ $ carry [$ param [0 ]] = [$ carry [$ param [0 ]]];
91
+ }
92
+ $ carry [$ param [0 ]][] = $ trimmed_param ;
93
+ }
94
+
95
+ return $ carry ;
96
+ };
97
+
98
+ return collect ($ matches )->reduce (function ($ carry , $ parameter ) use ($ console , &$ argument_index , $ duplicate_parameter_index ) {
85
99
$ param = explode ('= ' , $ parameter [0 ]);
86
100
87
101
if (count ($ param ) > 1 ) {
88
102
$ trimmed_param = trim (trim ($ param [1 ], '" ' ), "' " );
89
103
if ($ console ) {
90
- return starts_with ($ param [0 ], '-- ' ) ?
91
- [$ param [0 ] => $ trimmed_param ] :
92
- [$ argument_index ++ => $ trimmed_param ];
104
+ if (starts_with ($ param [0 ], ['-- ' , '- ' ])) {
105
+ $ carry = $ duplicate_parameter_index ($ carry , $ param , $ trimmed_param );
106
+ } else {
107
+ $ carry [$ argument_index ++] = $ trimmed_param ;
108
+ }
109
+
110
+ return $ carry ;
93
111
}
94
112
95
- return [ $ param[ 0 ] => $ trimmed_param] ;
113
+ return $ duplicate_parameter_index ( $ carry , $ param, $ trimmed_param) ;
96
114
}
97
115
98
- return starts_with ($ param [0 ], '-- ' ) && ! $ console ?
99
- [$ param [0 ] => true ] :
100
- [$ argument_index ++ => $ param [0 ]];
101
- })->toArray ();
116
+ starts_with ($ param [0 ], ['-- ' , '- ' ]) && ! $ console ?
117
+ $ carry [$ param [0 ]] = true :
118
+ $ carry [$ argument_index ++] = $ param [0 ];
102
119
103
- return $ parameters ;
120
+ return $ carry ;
121
+ }, []);
104
122
}
105
123
106
124
return [];
0 commit comments