VersionPress\Utils\ArrayUtils::stablesort PHP Метод

stablesort() публичный статический Метод

Adapted from http://stackoverflow.com/a/4353844/21728 / http://php.net/manual/en/function.usort.php#38827
public static stablesort ( &$array, string $cmp_function = 'strcmp' )
$array
$cmp_function string
    public static function stablesort(&$array, $cmp_function = 'strcmp')
    {
        // Arrays of size < 2 require no action.
        if (count($array) < 2) {
            return;
        }
        // Split the array in half
        $halfway = count($array) / 2;
        $array1 = array_slice($array, 0, $halfway);
        $array2 = array_slice($array, $halfway);
        // Recurse to sort the two halves
        self::stablesort($array1, $cmp_function);
        self::stablesort($array2, $cmp_function);
        // If all of $array1 is <= all of $array2, just append them.
        if (call_user_func($cmp_function, end($array1), $array2[0]) < 1) {
            $array = array_merge($array1, $array2);
            return;
        }
        // Merge the two sorted arrays into a single sorted array
        $array = [];
        $ptr1 = $ptr2 = 0;
        while ($ptr1 < count($array1) && $ptr2 < count($array2)) {
            if (call_user_func($cmp_function, $array1[$ptr1], $array2[$ptr2]) < 1) {
                $array[] = $array1[$ptr1++];
            } else {
                $array[] = $array2[$ptr2++];
            }
        }
        // Merge the remainder
        while ($ptr1 < count($array1)) {
            $array[] = $array1[$ptr1++];
        }
        while ($ptr2 < count($array2)) {
            $array[] = $array2[$ptr2++];
        }
        return;
    }

Usage Example

 /**
  * @param TrackedChangeInfo[] $changeInfoList
  * @return TrackedChangeInfo[]
  */
 private function sortChangeInfoList($changeInfoList)
 {
     ArrayUtils::stablesort($changeInfoList, function ($changeInfo1, $changeInfo2) {
         /** @var TrackedChangeInfo|BulkChangeInfo $changeInfo1 */
         /** @var TrackedChangeInfo|BulkChangeInfo $changeInfo2 */
         return $changeInfo1->getPriority() - $changeInfo2->getPriority();
     });
     return $changeInfoList;
 }
All Usage Examples Of VersionPress\Utils\ArrayUtils::stablesort