Php 如何返回已按特定值排序的数组

Php 如何返回已按特定值排序的数组,php,arrays,sorting,Php,Arrays,Sorting,下面是我的代码 $gamePrice = 1350; $arr = array(1233, 4445, 1100, 9008, 900, 1320, 1390, 1320, 1400); function getClosest($gamePrice, $arr){ $closestAnswer = null; foreach($arr as $guess){ if($closestAnswer == null

下面是我的代码

$gamePrice = 1350;

$arr = array(1233, 4445, 1100, 9008, 900, 1320, 1390, 1320, 1400);


function getClosest($gamePrice, $arr){
            $closestAnswer = null;
            foreach($arr as $guess){
                if($closestAnswer == null || abs($gamePrice - $closestAnswer)>(abs($guess - $gamePrice))){
                    $closestAnswer = $guess;
                }
            }
            return $closestAnswer;
        }

echo getClosest($gamePrice, $arr);
所以现在它只返回值-1320,这是最接近$gamePrice-1350的值

但我希望函数返回一个数组,例如$arr2,该数组在数组开始处按最接近的答案排序,即$arr2[0],其余答案从该值开始按降序排列,即下一个最接近的答案应该是$arr[1]距离游戏价格最远的答案应该在排序数组的末尾

我希望这是明确的,有人可以帮助很快

谢谢。

$gamePrice=1350;
$gamePrice = 1350;

$arr = array(1233, 4445, 1100, 9008, 900, 1320, 1390, 1320, 1400);

usort(
    $arr,
    function($a, $b) use ($gamePrice) {
        $r1 = abs($gamePrice - $a);
        $r2 = abs($gamePrice - $b);
        if ($r1 == $r2) {
            return 0;
        }
        return ($r1 < $r2) ? -1 : 1;
    }
);

var_dump($arr);
$arr=阵列(123344451100900890012301390132001400); 乌斯波特( $arr, 函数($a,$b)使用($gamePrice){ $r1=abs($gamePrice-$a); $r2=abs($gamePrice-$b); 如果($r1=$r2){ 返回0; } 回报率($r1<$r2)?-1:1; } ); var_转储($arr);
你能在这里写下你期望的输出吗?既然@MarkBaker更快…@Passerby-没有什么能阻止你发布稍微干净的版本:我刚刚调整了我的版本来处理等距值,因此低于目标值的值将被视为排序中早于较高值的值(例如,如果那些1320中的一个是1380)@MarkBaker因为这个问题相对来说并不难,我只是觉得没有必要发布另一个答案,因为它“更干净”…如果你想以某种方式维持秩序,我发现这可能会有帮助。@Calum为什么你要删除答案..这也是正确的答案,用另一种方式..嗯,你如何处理两个
1320
s?其中一个不会被覆盖吗?谢谢伙计们,两个很好的答案,正是我想要的,选择了Calum的答案,因为它支持早期版本的php,尽管usort方法也很好谢谢Mark,很好的答案。
<?php

$gamePrice = 1350;
$arr = array(1233, 4445, 1100, 9008, 900, 1320, 1390, 1320, 1400);
var_dump(closest($arr, $gamePrice));

function closest($arr, $gamePrice) 
{
    for ($i = 0; $i < count($arr); $i++)
    {
        for ($x = 0; $x < count($arr); $x++)
        {
            // Swap index if difference is less
            if (abs($arr[$i] -  $gamePrice) < abs($arr[$x] -  $gamePrice))
            {
                $var = $arr[$i];
                $arr[$i] = $arr[$x];
                $arr[$x] = $var;
            }
        }
    }
    return $arr;
}