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

时间:2015-09-17 10:49:40

标签: php arrays sorting

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

我尝试使用uasort并编写自定义排序函数来获取固定数字(在本例中为3),但它不起作用。我写了一个函数,使得固定数字远离当前正在比较的两位数,并将abs应用于它们。

我需要一种方法,我可以比较哪个数字比较当前访问的数字的接近程度,并将其插入数组中的正确位置。

有什么想法吗?可以使用uasort吗?

来实现

1 个答案:

答案 0 :(得分:9)

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

number   | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
---------------------------------------
distance | 3 | 2 | 1 | 0 | 1 | 2 | 3 | 

代码:

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