Skip to content

Commit 5aa83a4

Browse files
committed
Update Arrayify.php
1 parent 207849e commit 5aa83a4

File tree

1 file changed

+37
-51
lines changed

1 file changed

+37
-51
lines changed

src/Filesystem/Arrayify.php

Lines changed: 37 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)