1.2.1410. Usort Sorting In PHP 7.0

Usort(), uksort() and uasort() behavior has changed in PHP 7. Values that are equals (based on the user-provided method) may be sorted differently than in PHP 5.

If this sorting is important, it is advised to add extra comparison in the user-function and avoid returning 0 (thus, depending on default implementation). In PHP 5, the results is ::

Array
(
    [0] => 3
    [1] => 4
    [2] => 2
    [3] => 6
)

in PHP 7, the result is ::

Array
(
    [0] => 2
    [1] => 4
    [2] => 3
    [3] => 6
)
<?php

$a = [ 2, 4, 3, 6];

function noSort($a) { return $a > 5; }

usort($a, 'noSort');
print_r($a);

?>

See also Sort order of equal elements.

1.2.1410.1. Suggestions

  • Make sure the sorting function doesn’t generate any values of the same order.

  • Add an extra order branch to avoid values of the same order.

  • Spot the values of the same order after the sort, and sort them again, independently.

1.2.1410.2. Specs

Short name

Php/UsortSorting

Rulesets

All, Changed Behavior, CompatibilityPHP70

Exakat since

0.8.4

PHP Version

All

Severity

Major

Time To Fix

Slow (1 hour)

Changed Behavior

PHP 7.0 - More

Precision

Medium

Features

sort

Available in

Entreprise Edition, Exakat Cloud