按到数字的距离对数组进行排序


Sort array by the distance to a number

例如,如果您有一组数字5,4,3,2,1,并且您希望所有数字按最接近3的顺序排列,那么结果将是3,2,4,5,1

我试过使用uasort并编写了一个自定义排序函数来取固定数字(在这种情况下为3),但它不起作用。我编写了这个函数,从当前正在比较的两个数字中取出固定数字,并对它们应用abs

我需要一种方法,我可以比较哪个数字比较当前被访问的数字有多接近,并将其放置在数组的正确位置。

任何想法?这可以用uasort实现吗?

uasort()已经是一个好的开始。现在您只需要使用到3的距离作为对数组排序的标准:

以前<> | 0 | 1 | 2 | 3 | 4 | 5 | 6 |---------------------------------------距离| 3 | 2 | 1 | 0 | 1 | 2 | 3 |之前代码:

uasort($arr, function($a, $b){
    return abs(3-$a) - abs(3-$b);
});