如何返回已针对特定值排序的数组

时间:2013-09-26 10:30:07

标签: 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 || abs($gamePrice - $closestAnswer)>(abs($guess - $gamePrice))){
                    $closestAnswer = $guess;
                }
            }
            return $closestAnswer;
        }

echo getClosest($gamePrice, $arr);

所以目前这只返回值 - 1320,这是最接近$ gamePrice - 1350的值。

我想要发生的是函数返回一个数组,例如$ arr2,它在数组的开头用最接近的答案排序,即$ arr2 [0],其余的答案按降序排列从这个值来看,下一个最接近的答案应该是$ arr [1],而游戏价格中最远的答案应该在排序数组的末尾。

我希望这很清楚,有人可以很快帮忙。

感谢。

2 个答案:

答案 0 :(得分:2)

<?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;
}

答案 1 :(得分:1)

$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);