以下是我的代码
$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],而游戏价格中最远的答案应该在排序数组的末尾。
我希望这很清楚,有人可以很快帮忙。
感谢。
答案 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);