1

下面是我的代码

$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] 并且离游戏价格最远的答案应该在排序数组的末尾。

我希望这很清楚,有人可以尽快提供帮助。

谢谢。

4

2 回答 2

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;
}
于 2013-09-26T10:45:38.133 回答
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);
于 2013-09-26T10:38:08.750 回答