Hallo epvp,
habe jetzt grad irgendwie ein Problem und komme nicht auf die Lösung.
Ich habe einen Wert z.B. (16:25:04) und versuche die Nächst liegende in der Datenbank zu finden.
Die Werte sehen in der Datenbank wie folgt aus (15:87:21 , 18:26:01 , 84:10:15)
Nie Größer als 100:100:26
Hoffe ich habe es verständlich ausgedrückt.
Hier mal etwas, was ich im Internet gefunden habe. Nur Leider stimmt das überhaupt nicht überein.
habe jetzt grad irgendwie ein Problem und komme nicht auf die Lösung.
Ich habe einen Wert z.B. (16:25:04) und versuche die Nächst liegende in der Datenbank zu finden.
Die Werte sehen in der Datenbank wie folgt aus (15:87:21 , 18:26:01 , 84:10:15)
Nie Größer als 100:100:26
Hoffe ich habe es verständlich ausgedrückt.
Code:
$qWerte = sprintf("SELECT * FROM TB_Werte WHERE Name='ul'");
$rWerte = mysql_query($qWerte);
$a1 = array();
$a2 = array();
$a3 = array();
while ($row= mysql_fetch_assoc($rWerte)) {
$aKoordUL = explode(":",$row['Koordinaten']);
array_push($a1,(int)$aKoordUL[0]);
array_push($a2,(int)$aKoordUL[1]);
array_push($a3,(int)$aKoordUL[2]);
}
asort($a1);
asort($a2);
asort($a3);
Code:
$GLOBALS['steps'] = 0;
$iKoord = "16:8:23";
$array = explode(":",$iKoord);
echo findClosest((int)$array[0], $a1, 0, count($a1)-1), "\n";
echo "steps: {$GLOBALS['steps']}";
function findClosest($needle, $numbers, $from, $to){
$GLOBALS['steps']++;
$p = ($from + $to)/2;
$ceil = ceil($p);
$floor = floor($p);
if ($from == $floor || $to == $ceil){
$d1 = abs($needle - $numbers[$floor]);
$d2 = abs($needle - $numbers[$ceil]);
if($d1 < $d2){
return $numbers[$floor];
}
else{
return $numbers[$ceil];
}
}
elseif ($numbers[$floor] > $needle) {
return findClosest($needle, $numbers, $from, $floor);
}
else {
return findClosest($needle, $numbers, $ceil, $to);
}
}