note 126326 added to function.uasort
| From: | JeffZhang at main dot php dot net | Date: | Wed, 11 Aug 2021 06:39:02 +0000 |
| Subject: | note 126326 added to function.uasort | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-216767@lists.php.net to get a copy of this message | ||
A stable sort is realized by merging sorting, like "uasort" but stable, and the code is
modified based on "mergesort"
<?php
function uamergesort(&$array, $callback = 'strcmp') {
$arraycount = count($array);
if ($arraycount < 2) {
return;
}
$halfway = $arraycount / 2;
$array1 = array_slice($array, 0, $halfway, true);
$array2 = array_slice($array, $halfway, null, true);
$this->uamergesort($array1, $callback);
$this->uamergesort($array2, $callback);
$array = array();
$ptr1 = $ptr2 = 0;
$array1keys = array_keys($array1);
$array1 = array_values($array1);
$array2keys = array_keys($array2);
$array2 = array_values($array2);
$array1count = count($array1);
$array2count = count($array2);
while ($ptr1 < $array1count && $ptr2 < $array2count) {
if (call_user_func($callback, $array1[$ptr1], $array2[$ptr2]) < 1) {
$array[$array1keys[$ptr1]] = $array1[$ptr1];
$ptr1++;
} else {
$array[$array2keys[$ptr2]] = $array2[$ptr2];
$ptr2++;
}
}
while ($ptr1 < $array1count) {$array[$array1keys[$ptr1]] = $array1[$ptr1]; $ptr1++;}
while ($ptr2 < $array2count) {$array[$array2keys[$ptr2]] = $array2[$ptr2]; $ptr2++;}
return;
}
?>
----
Server IP: 45.112.84.4
Probable Submitter: 45.112.85.242 (proxied: 2409:8960:1224:6c3f:8004:81c7:53ef:870)
----
Manual Page -- https://php.net/manual/en/function.uasort.php
Edit -- https://main.php.net/note/edit/126326
Del: integrated -- https://main.php.net/note/delete/126326/integrated
Del: useless -- https://main.php.net/note/delete/126326/useless
Del: bad code -- https://main.php.net/note/delete/126326/bad+code
Del: spam -- https://main.php.net/note/delete/126326/spam
Del: non-english -- https://main.php.net/note/delete/126326/non-english
Del: in docs -- https://main.php.net/note/delete/126326/in+docs
Del: other reasons-- https://main.php.net/note/delete/126326
Reject -- https://main.php.net/note/reject/126326
Search -- https://main.php.net/manage/user-notes.php