@@ -81,26 +81,44 @@ public function compileParameters($console = false)
8181 preg_match_all ($ regex , $ this ->parameters , $ matches , PREG_SET_ORDER , 0 );
8282
8383 $ 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 ) {
8599 $ param = explode ('= ' , $ parameter [0 ]);
86100
87101 if (count ($ param ) > 1 ) {
88102 $ trimmed_param = trim (trim ($ param [1 ], '" ' ), "' " );
89103 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 ;
93111 }
94112
95- return [ $ param[ 0 ] => $ trimmed_param] ;
113+ return $ duplicate_parameter_index ( $ carry , $ param, $ trimmed_param) ;
96114 }
97115
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 ];
102119
103- return $ parameters ;
120+ return $ carry ;
121+ }, []);
104122 }
105123
106124 return [];
0 commit comments