php usort 的那个排序函数的返回值老是记不住返回1的时候是按升序还是降序排,网上搜了一大堆也没个能说明白的。 直到今天看到了一个说法。
所以我们只需要根据我们自定义函数返回的是-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) }复制代码