PHP: How to check which item in an array is closest to a given number? -


i need check item in array array( 300, 600, 900, 1200 ) closest number have stored in variable $number.

i've looked through php manual either approach or function me research has found nothing. hoping can suggest something.

if numbers in array sorted in ascending order, can loop through once checking distance go , start moving away number, return last number. this:

<?php $number = mt_rand(1, 1200); $array = array(300, 600, 900, 1200);  function closest($number, $array){     //infinite distance start     $dist = inf;     //remember our last value     $last = false;      foreach($array $v){         //get our current distance         $dist2 = abs($number - $v);          //check if getting further last number         if($dist2 > $dist){             //return our last value             return $last;         }         //set our new distance         $dist = $dist2;         //set our last value next iteration         $last = $v;     }     return $last; }  echo "<pre>"; var_dump($number); var_dump(closest($number, $array)); 

will output:

input: int(522) output: int(600) 

demo: http://codepad.viper-7.com/njcdp0

if values not sorted, need loop on each value distance , find smallest distance. like:

<?php $number = mt_rand(1, 1200); $array = array(300, 600, 900, 1200);  function closest($number, $array){     //find distances number     $dist = array_map(         function($val) use ($number) {             return abs($number - $val);         },         $array);     //flip array distance key     $dist = array_flip($dist);     //sort distance key     ksort($dist);      //get key shortest distance     $key = array_values($dist)[0];      return $array[$key]; }  echo "<pre>"; echo "input: "; var_dump($number); echo "output: "; var_dump(closest($number, $array)); 

outputs:

input: int(677) output: int(600) 

demo: http://codepad.viper-7.com/n5nv0v


Comments

Popular posts from this blog

android - MPAndroidChart - How to add Annotations or images to the chart -

javascript - Add class to another page attribute using URL id - Jquery -

firefox - Where is 'webgl.osmesalib' parameter? -