php usort 的那个排序函数的返回值老是记不住返回1的时候是按升序还是降序排,网上搜了一大堆也没个能说明白的。 直到今天看到了一个说法。

PHP usort 排序函数老是记不住怎么用?_PHP usort

所以我们只需要根据我们自定义函数返回的是-1 还是 1 来记,返回1,则表示usort函数会帮我们交换a和b 的位置。返回-1 则不交换 a和b 的位置。

$arr = [1,6,5,3,4,2];
//我们这里在 a < b 的时候返回1,表示我们希望a < b 的时候usort函数帮我们交换a,b ,交换后 a和b的大值就会出现在前面。从而达到降序排列数组的目的。
usort($arr, function ($a, $b) {
    return $a < $b ? 1 : -1;
});

var_dump($arr);

array(6) {
  [0]=>
  int(6)
  [1]=>
  int(5)
  [2]=>
  int(4)
  [3]=>
  int(3)
  [4]=>
  int(2)
  [5]=>
  int(1)
}复制代码
$arr = [1,6,5,3,4,2];
//a小于b的时候返回-1,说明a<b的时候不需要交换。说明最后是按升序排序。
usort($arr, function ($a, $b) {
    return $a < $b ? -1 : 1;
});

var_dump($arr);
array(6) {
  [0]=>
  int(1)
  [1]=>
  int(2)
  [2]=>
  int(3)
  [3]=>
  int(4)
  [4]=>
  int(5)
  [5]=>
  int(6)
}复制代码
$arr = [1,6,5,3,4,2];
//a > b返回-1,表示a>b 的时候不需要交换,a<b的时候才交换。所以最后的排序是降序。
usort($arr, function ($a, $b) {
    return $a > $b ? -1 : 1;
});

var_dump($arr);
array(6) {
  [0]=>
  int(6)
  [1]=>
  int(5)
  [2]=>
  int(4)
  [3]=>
  int(3)
  [4]=>
  int(2)
  [5]=>
  int(1)
}复制代码
$arr = [1,6,5,3,4,2];
//a>b的时候返回1,表示a>b的时候要交换。所以最后就是俺升序排序了。
usort($arr, function ($a, $b) {
    return $a > $b ? 1 : -1;
});

var_dump($arr);
array(6) {
  [0]=>
  int(1)
  [1]=>
  int(2)
  [2]=>
  int(3)
  [3]=>
  int(4)
  [4]=>
  int(5)
  [5]=>
  int(6)
}复制代码