PHP는

2016-12-15 1 views
1

내가하고 내가 이런 식으로 다음 코드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); 

대신의 나에게 가장 가까운 수를 제공 마주 친 첫 번째 낮은 숫자를 반환합니다.

예 : 내가 어떻게받을 수 있나요

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" 
    } 
} 

:이 같은 99

$의 citylist 보이는 반환해야합니다 동안 1 : 나는이 숫자

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

이 반환을 사용하려는 경우 $ stappeng에 가장 가까운 숫자 (예 : '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

+0

덕분에 짝짓기, 매력처럼 작동합니다! –

+1

가장 가까운 ID가 아닌'오른쪽 이하 ','98'는'6','99'을 제공하십시오. – C2486

+1

내 대답은 위의 주어진 고려 사항으로 업데이트되었습니다. – C2486

0
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)]; 
} 

?>