@@ -268,71 +268,57 @@ public static function uniqueMultiple(array $array) : array
268268 * @param array $array
269269 * @param mixed $orderby
270270 * @param string $order
271- * @param bool $preserve, Preserve keys
271+ * @param bool $preserve ( keys)
272272 * @return array
273273 */
274- public static function sort ($ array = [] , $ orderby = [], $ order = 'ASC ' , $ preserve = false )
275- {
276- if ( empty ( $ orderby) ) {
277- return $ array ;
278- }
274+ public static function sort (array $ array , $ orderby, string $ order = 'ASC ' , bool $ preserve = false ) : array
275+ {
276+ if ( ! $ orderby ) {
277+ return $ array ;
278+ }
279279
280- if ( TypeCheck::isString ($ orderby ) ) {
281- $ orderby = [$ orderby => $ order ];
282- }
280+ if ( TypeCheck::isString ($ orderby ) ) {
281+ $ orderby = [$ orderby => $ order ];
282+ }
283283
284- foreach ( $ orderby as $ field => $ direction ) {
285- $ orderby [$ field ] = ('DESC ' === Stringify::uppercase ($ direction )) ? 'DESC ' : 'ASC ' ;
286- }
284+ foreach ($ orderby as $ field => $ dir ) {
285+ $ orderby [$ field ] = ('DESC ' === Stringify::uppercase ($ dir )) ? 'DESC ' : 'ASC ' ;
286+ }
287287
288- static :: $ orderby = $ orderby;
288+ $ sort = function ( $ a , $ b ) use ( $ orderby) {
289289
290- if ( $ preserve ) {
291- uasort ($ array , ['\FloatPHP\Classes\Filesystem\Arrayify ' , 'sortCallback ' ]);
292-
293- } else {
294- usort ($ array , ['\FloatPHP\Classes\Filesystem\Arrayify ' , 'sortCallback ' ]);
295- }
290+ $ a = (array )$ a ;
291+ $ b = (array )$ b ;
296292
297- return $ array ;
298- }
293+ foreach ($ orderby as $ field => $ dir ) {
299294
300- /**
301- * Sort array callback.
302- *
303- * @access public
304- * @param mixed $a
305- * @param mixed $b
306- * @return mixed
307- */
308- public static function sortCallback ($ a , $ b )
309- {
310- if ( !static ::$ orderby ) {
311- return 0 ;
312- }
295+ if ( !isset ($ a [$ field ]) || !isset ($ b [$ field ]) ) {
296+ continue ;
297+ }
313298
314- $ a = (array )$ a ;
315- $ b = (array )$ b ;
299+ if ( $ a [$ field ] == $ b [$ field ] ) {
300+ continue ;
301+ }
316302
317- foreach ( static :: $ orderby as $ field => $ direction ) {
303+ $ val = ( ' DESC ' === $ dir ) ? [ 1 , - 1 ] : [- 1 , 1 ];
318304
319- if ( ! isset ($ a [$ field ]) || ! isset ($ b [$ field ]) ) {
320- continue ;
321- }
305+ if ( TypeCheck:: isNumeric ($ a [$ field ]) && TypeCheck:: isNumeric ($ b [$ field ]) ) {
306+ return ( $ a [ $ field ] < $ b [ $ field ]) ? $ val [ 0 ] : $ val [ 1 ] ;
307+ }
322308
323- if ( $ a [$ field ] == $ b [$ field ] ) {
324- continue ;
325- }
309+ return 0 > strcmp ($ a [$ field ], $ b [$ field ]) ? $ val [0 ] : $ val [1 ];
310+ }
326311
327- $ results = ('DESC ' === $ direction ) ? [1 , -1 ] : [-1 , 1 ];
312+ return 0 ;
313+ };
328314
329- if ( TypeCheck::isNumeric ($ a [$ field ]) && TypeCheck::isNumeric ($ b [$ field ]) ) {
330- return ($ a [$ field ] < $ b [$ field ]) ? $ results [0 ] : $ results [1 ];
331- }
315+ if ( $ preserve ) {
316+ uasort ($ array , $ sort );
332317
333- return 0 > strcmp ($ a [$ field ],$ b [$ field ]) ? $ results [0 ] : $ results [1 ];
334- }
318+ } else {
319+ usort ($ array , $ sort );
320+ }
335321
336- return 0 ;
337- }
322+ return $ array ;
323+ }
338324}
0 commit comments