оператор if — PHP Нужна функция для получения ближайшего числа из объекта

У меня есть следующий код

function closestdown($array, $number) {

sort($array);
foreach ($array as $a) {
if ($a->stappen <= $number){
return $a;
}}
return end($array); // or return NULL;
}

и я называю это так:

$citylist = $manager->getStedenList();
$stappeng = $user->user_stappen;
$lowernumber = closestdown($citylist, $currentcity);

но вместо того, чтобы дать мне самое близкое число, он возвращает первое более низкое число, которое встречает.

пример: если бы я использовал эти цифры

$lowernumber = closestdown(1 5 6 99 487 98785, 100);

он возвращает: 1, а должен возвращать 99.

$ citylist выглядит так:

array(4) {
[0]=>
object(Steden)#272 (3) {
["name"]=>
string(10) "Bourguette"["id"]=>
string(1) "6"["stappen"]=>
string(2) "13"}
[1]=>
object(Steden)#268 (3) {
["name"]=>
string(4) "Gent"["id"]=>
string(1) "4"["stappen"]=>
string(3) "666"}
[2]=>
object(Steden)#271 (3) {
["name"]=>
string(16) "garabier(Afrika)"["id"]=>
string(1) "8"["stappen"]=>
string(9) "909814037"}
[3]=>
object(Steden)#297 (3) {
["name"]=>
string(9) "Terneuzen"["id"]=>
string(1) "7"["stappen"]=>
string(10) "2147483647"}
}

Как получить ближайшее число к $ stappeng (оно содержит только 1 пример значения: «100»)

заранее спасибо

1

Решение

Вам нужно что-то изменить в цикле

<?php
function closestdown($array, $number) {
if(count($array)==1){
return $array[0];
}
sort($array);
foreach ($array as $a) {
if ($a > $number){//You can use $a->stappen
if(($a-$number)<($number-$previous))
return $a;
else
return $previous;
}else{
$previous = $a;
}
}
return end($array); // or return NULL;
}
echo $lowernumber = closestdown([1, 5, 6, 99, 487, 98785], 100);
?>

Проверьте демо: https://eval.in/698262

1

Другие решения

function closestdown($array, $number) {
sort($array);
$closest = 1000000000000;
$return = null;
foreach ($array as $a) {
if (abs($a->stappen - $number) < $closest && $a->stappen <= $number){
$closest = abs($a->stappen - $number);
$return = $a;
}}
return $return ;
}
0

Ваша функция вернула первое значение.

$closest = NULL;
foreach ($array as $a) {
if ($a->stappen <= $number) {
$closest = $a;
}
else /* if ($a->stappen > $number) */ {
return $closest;
}
}
...
0

Пожалуйста, используйте это ..

<?php

$array = array(1,4,5,90,99,102,104);
$number = 100;

echo closestdown($array,$number);

function closestdown($array, $number) {

//sort($array);
$temp = array();
foreach ($array as $a) {

array_push($temp,abs($a-$number));

}
asort($temp);
return $array[key($temp)];
}

?>
0
По вопросам рекламы [email protected]