Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > Web Development
You last visited: Today at 04:55

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



[PHP] Nähere Zahl suchen

Discussion on [PHP] Nähere Zahl suchen within the Web Development forum part of the Coders Den category.

Reply
 
Old   #1
dotCom
 
Devsome's Avatar
 
elite*gold: 12400
The Black Market: 104/0/0
Join Date: Mar 2009
Posts: 15,881
Received Thanks: 4,386
[PHP] Nähere Zahl suchen

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.

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);
Hier mal etwas, was ich im Internet gefunden habe. Nur Leider stimmt das überhaupt nicht überein.

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);        
	}
}
Devsome is offline  
Old 06/17/2014, 18:17   #2
 
'Heaven.'s Avatar
 
elite*gold: 1
The Black Market: 331/0/0
Join Date: Jun 2012
Posts: 5,819
Received Thanks: 3,200
Falls es richtige 3D-Koordinaten sind, kannst du mittels Pythagoras die Distanz ermitteln und demnach vergleichen


'Heaven. is offline  
Old 06/17/2014, 19:32   #3
dotCom
 
Devsome's Avatar
 
elite*gold: 12400
The Black Market: 104/0/0
Join Date: Mar 2009
Posts: 15,881
Received Thanks: 4,386
Quote:
Originally Posted by 'Heaven. View Post
Falls es richtige 3D-Koordinaten sind, kannst du mittels Pythagoras die Distanz ermitteln und demnach vergleichen


Danke dir.

Muss jetzt nur noch in einem Array speichern welche Zahl am niedrigsten ist und diese dann jeweils ausgeben.

Code:
echo "Meine Koordinaten: " . (int)$array[0] . ":" .  (int)$array[0] . ":" .  (int)$array[0] . "<br>";
for ($i = 1; $i <= count($a1); $i++) {
	echo sqrt(pow(($a1[$i] - (int)$array[0]),2) + pow(($a2[$i] - (int)$array[1]),2) + pow(($a3[$i] - (int)$array[2]),2)) . " => Koordinaten zum Vergleich " . $a1[$i] . ":" . $a2[$i] . ":" . $a3[$i] . "<br>" ;
}
Devsome is offline  
Old 06/17/2014, 19:59   #4
 
'Heaven.'s Avatar
 
elite*gold: 1
The Black Market: 331/0/0
Join Date: Jun 2012
Posts: 5,819
Received Thanks: 3,200
Code:
 static Opponent GetClosestTarget()
                {
                    var possibleShips = _opponents.Where(s => s.Company != 0 /*&& s.Company != _hero.FractionId*/).ToList();
                    Opponent ret = null;
                    if (possibleShips.Count > 0)
                    {
               
                        if (possibleShips.Count == 1)
                        {
                            ret = possibleShips[0];
                        }
                        else
                        {
                            ret = possibleShips[0];
                            double dist = _getDistance(_hero.X, _hero.Y, ret.X, ret.Y);

                            foreach (var x in possibleShips)
                            {
                                double d = _getDistance(_hero.X, _hero.Y, x.X, x.Y);
                                double com = Math.Min(dist, d);
                                if (com != dist)
                                {
                                    ret = x;
                                    dist = d;
                                }
                            }

                        }

                
                    }
                    return ret;
                }

Eventuell hilft dir ja dies
'Heaven. is offline  
Thanks
1 User
Old 06/17/2014, 20:47   #5
dotCom
 
Devsome's Avatar
 
elite*gold: 12400
The Black Market: 104/0/0
Join Date: Mar 2009
Posts: 15,881
Received Thanks: 4,386
Habe trozdem noch irgendwie ein Problem bzw. gefällt mir die Ausgabe nicht.

Kann ich den return Wert nicht irgendwie Speichern und weiter unten einzelnd ausgeben lassen ?
z.B.
Code:
$data = $api->findClosest($_POST['spielername'];

//weiter unten

echo $data[0][0];
Code:
if ($_POST['findClosest']){
	if(empty($_POST['spielername']))
	{
		$Information = "<p>Bitte geben Sie einen Spieler ein</p>";
	}else{
		$Information = "<p>Gefunden: ";
		foreach($api->findClosest($_POST['spielername']) as $key=>$value)
		{
			$Information .= " [" . $key . "] ".$value;
		}
		$Information .= "</p>";
	}
}
Code:
public static function findClosest($spielerName){
	$getPlayerID = sprintf("SELECT ID FROM TB_DatenPlayer WHERE Spieler='" . mysql_real_escape_string($spielerName) . "'");
	$playerID = mysql_query($getPlayerID);
	while($varID = mysql_fetch_array($playerID))
	{
		$finalID = $varID['ID'];
	}
	
	$getPlayerI = sprintf("SELECT Koordinaten FROM TB_DatenKoo WHERE ID='" . $finalID . "'");
	$playerKoord = mysql_query($getPlayerI);
	while($varInseln = mysql_fetch_array($playerKoord))
	{
		$finalInseln = $varInseln['Koordinaten'];
	}

	$array = explode(":",$finalInseln);
	
	$qWerte = sprintf("SELECT * FROM TB_DatenKoo WHERE Koordinaten='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);
	
	$a4 = array();
	for ($i = 1; $i <= count($a1)-1; $i++) {
		$varAbstand =  round(sqrt(pow(($a1[$i] - (int)$array[0]),2) + pow(($a2[$i] - (int)$array[1]),2) + pow(($a3[$i] - (int)$array[2]),2)), 3);
		$zwischenWerte["Abstand"] 	= $varAbstand;
		$zwischenWerte["Lange"] 		= $a1[$i];
		$zwischenWerte["Breite"] 		= $a2[$i];
		$zwischenWerte["Punkt"] 		= $a3[$i];
		array_push($a4,$zwischenWerte);
	}
	$min = min($a4);
	return $min;
}
Devsome is offline  
Old 06/19/2014, 14:32   #6
dotCom
 
Devsome's Avatar
 
elite*gold: 12400
The Black Market: 104/0/0
Join Date: Mar 2009
Posts: 15,881
Received Thanks: 4,386
^niemand eine Idee ?
Devsome is offline  
Old 06/19/2014, 14:42   #7
 
tolio's Avatar
 
elite*gold: 2932
The Black Market: 169/1/0
Join Date: Oct 2009
Posts: 6,966
Received Thanks: 1,097
Quote:
Originally Posted by Devsome View Post
Kann ich den return Wert nicht irgendwie Speichern und weiter unten einzelnd ausgeben lassen ?
packs einfach in ne variable rein und gibts später aus, wo ist das problem?
tolio is offline  
Old 06/19/2014, 14:45   #8
dotCom
 
Devsome's Avatar
 
elite*gold: 12400
The Black Market: 104/0/0
Join Date: Mar 2009
Posts: 15,881
Received Thanks: 4,386
Quote:
Originally Posted by tolio View Post
packs einfach in ne variable rein und gibts später aus, wo ist das problem?
ich stande irgendwie auf dem Schlauch. Danke
Devsome is offline  
Reply


Similar Threads Similar Threads
[Selling] Verkaufe 65er max. geared Chanter auf Kromede(nähere INFO PN)
10/26/2013 - Aion Trading - 2 Replies
Hallo, verkaufe hiermit meinen 65er Kantor auf Kromede. Veteranen Belohnungen bis Stufe 40, Goldpaket läuft noch ca. 1 Jahr. Der Kantor hat max. 65er Gear, bei näheren Infos zum gear PN. Schlag mir einen Preis vor oder einen so ziemlich gleich gegearten 65er Kleriker auf Kromede. MFG: Relizee pumb
[B] WOW-Account (nähere Infos im Thread) [S] Gebt mir Vorschläge
02/27/2013 - World of Warcraft Trading - 3 Replies
Heyo liebe Community. Ich hab mich jetzt entschlossen meinen WoW Account zu verkaufen aus Privaten Gründen (Freundin -_-) So. Auf dem Account befindet sich ein 85 Magier der für PvE auf Arkan und für PvP auf Frost geskillt ist. Der Magier ist noch nicht sehr lange auf 85, daher ist das Equip auch dementsprechend. Der Magier hat jeden Reitskill gelernt (310%) Falls wer mehr Infos möchte soll er mir doch bitte ein PM schreiben oder mich in Skype adden: CreepaZ Auf dem account befindet sich...
[VB.NET] Zahl > 50 elseif Zahl > 70 then...
02/25/2013 - .NET Languages - 5 Replies
Hi, hab mal ein Problem und weiß nicht wie ich dazu bei google suchen soll. Und zwar hab ich eine Zahl als STRING -.- und wollte mit dieser nun eine if Abfrage machen. If Zahl > 50 then ....
nähere erklährung von essamp
10/04/2009 - Metin2 Private Server - 2 Replies
könnte mir einer das näher erklären bei mir lätt der die seite immmer stunden lang -wie komme ich an die ip -welche einstellungen muss ich drücken thx garantiert



All times are GMT +2. The time now is 04:55.


Powered by vBulletin®
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2024 elitepvpers All Rights Reserved.