Sort Comparison Functions That Return Boolean Value is Deprecated in PHP 8.0

PHP provides functions that allows to sort an array using a user-defined comparison function. The comparison function must return an integer greater than zero if first element is larger than second, less than zero if first element is smaller than second, or zero if both elements are equal:

  • > 0 if a > b
  • < 0 if a < b
  • 0 if a = b

Sorting functions that accept a user-defined comparison function is summarised in the following table:

No.FunctionSorts byKey association is maintained
1.uasortValueYes
2.uksortKeyYes
3.usortValueNo

Since PHP 8.0, if comparison function returns a boolean value (true or false), PHP will emit a deprecation warning.

<?php

$array = [5, 1, 9, 3, 5];
usort($array, function (int $a, int $b): bool {
    return $a > $b;
});

print_r($array);

Example will output:

Deprecated: usort(): Returning bool from comparison function is deprecated, return an integer less than, equal to, or greater than zero in main.php on line 6
Array
(
    [0] => 1
    [1] => 3
    [2] => 5
    [3] => 5
    [4] => 9
)

Example can be rewritten using spaceship operator (<=>). It returns -1, 0 or 1 when first element is respectively less than, equal to, or greater than second element.

<?php

$array = [5, 1, 9, 3, 5];
usort($array, function (int $a, int $b): int {
    return $a <=> $b;
});

print_r($array);

This article has 1 comment

Leave a Comment

Your email address will not be published. Required fields are marked *