2016-08-29 1 views
4

Ich muss das Ergebnis basierend auf den Berechnungen innerhalb einer Schleife zeigen. Das Ergebnis der Schleife sollte aufsteigend nach $ distance sein.PHP - Ausgabeergebnis in aufsteigender Reihenfolge von while() Schleife

$sql = "SELECT DISTINCT * FROM cinemas WHERE city='$city'"; 

    $result = $conn->query($sql); 

    if ($result->num_rows > 0) { 

     while($row = $result->fetch_assoc()) { 



    $lat1 = $_GET['lat']; 
    $lon1= $_GET['lon']; 
    $lat2 = $row['latitude']; 
    $lon2 = $row['longitude']; 

    //starting calculating the distance 

     $theta = $lon1 - $lon2; 
     $dist = sin(deg2rad($lat1)) * sin(deg2rad($lat2)) + cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * cos(deg2rad($theta)); 
     $dist = acos($dist); 
     $dist = rad2deg($dist); 
     $miles = $dist * 60 * 1.1515; 
     $unit = $miles * 1.609344; 

    $distance = substr($unit,0,4); 
echo $row['cinemaname'].$distance; 

}} 

Wie zeigt man das Ergebnis in aufsteigender Reihenfolge basierend auf dem $ Abstand an?

Es zeigt wie:

cinema name 20 km 
cinema name 5 km 
cinema name 30 km 
cinema name 3 km 

Ich muss zeigen:

cinema name 3 km 
cinema name 5 km 
cinema name 20 km 
cinema name 30 km 
+2

Speichern Sie die Werte in einem Array und sortieren Sie später das Array –

+0

Danke für Ihren Kommentar, aber ich habe keine Ahnung, wie das zu tun –

Antwort

2

Speichern Sie die Rückkehr in die während in einem Array wie folgt:

$cinema[$i]['cinemaname'] = $row['cinemaname']; 
$cinema[$i]['distance'] = $distance; 

und machen nach währenddessen:

0 jetzt

jetzt haben Sie Ihre Bestellung :)

Dieser Code ist:

$sql = "SELECT DISTINCT * FROM cinemas WHERE city='$city'"; 

$result = $conn->query($sql); 
$cinema = array(); 
$i = 0; 
if ($result->num_rows > 0) { 

    while($row = $result->fetch_assoc()) { 
     $lat1 = $_GET['lat']; 
     $lon1= $_GET['lon']; 
     $lat2 = $row['latitude']; 
     $lon2 = $row['longitude']; 

     //starting calculating the distance 

     $theta = $lon1 - $lon2; 
     $dist = sin(deg2rad($lat1)) * sin(deg2rad($lat2)) + cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * cos(deg2rad($theta)); 
     $dist = acos($dist); 
     $dist = rad2deg($dist); 
     $miles = $dist * 60 * 1.1515; 
     $unit = $miles * 1.609344; 

     $distance = substr($unit,0,4); 
     $cinema[$i]['cinemaname'] = $row['cinemaname']; 
     $cinema[$i]['distance'] = $distance; 
     $i++; 
    } 
} 

function sortByOrder($a, $b) { 
    return $a['distance'] - $b['distance']; 
} 

usort($cinema, 'sortByOrder'); 
+0

danke für die Antwort, aber zeigt leere Seite. Was soll ich hier wiedergeben? Als ich Echo zu $ ​​cinema [$ i] ['distance'] schrieb, zeigte es mir nicht in aufsteigender Reihenfolge ... –

+0

was ist die Ausgabe von print_r ($ cinema) nach dem usort? – Provie9

+0

'Array ([0] => Array ([cinemaname] => 44 [Entfernung] => 2.00) [1] => Array ([cinemaname] => 43 [Entfernung] => 2.34) [2] => Array ([cinemaname] => 47 [Abstand] => 5.61) [3] => Array ([cinemaname] => 41 [Abstand] => 6.08) [4] => Array ([cinem ... ' –

0
$sql = "SELECT DISTINCT * FROM cinemas WHERE city='$city'"; 



     $result = $conn->query($sql); 
    $distanceArray=array(''); 
$i=0; 
     if ($result->num_rows > 0) { 

     while($row = $result->fetch_assoc()) { 



    $lat1 = $_GET['lat']; 
    $lon1= $_GET['lon']; 
    $lat2 = $row['latitude']; 
    $lon2 = $row['longitude']; 

    //starting calculating the distance 

     $theta = $lon1 - $lon2; 
     $dist = sin(deg2rad($lat1)) * sin(deg2rad($lat2)) + cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * cos(deg2rad($theta)); 
     $dist = acos($dist); 
     $dist = rad2deg($dist); 
     $miles = $dist * 60 * 1.1515; 
     $unit = $miles * 1.609344; 

    $distance = substr($unit,0,4); 
    $distanceArray[$i]=$row['cinemaname'].$distance; 
$i++; 
}} 
sort($distanceArray); 
foreach($distanceArray as $nameDistance) 
{ 
echo $nameDistance; echo '<br>'; 
} 
+0

Danke Anish, aber was wenn ich zwei Schleifen habe? Eine While-Schleife innerhalb der While-Schleife, weil es zwei Auswahlen aus zwei Tabellen gibt ... –

+0

Bitte teilen Sie Ihre Datenbankstruktur Beispiel .. –

+0

gibt es 3 Tabellen: '$ sql =" SELECT DISTINCT cinemaname, id AUS Kinos WHERE cit y = '$ Stadt' "; $ sql2 = "WÄHLEN SIE DISTINCT cinemaname, id, logo VON kino WHERE id = '$ cinemaname'"; $ sql3 = "SELECT DISTINCT * FROM moviecinemashowsassociation WHERE kinoid = '$ kinoid' AND movietid = '$ movietid' AND showdate = '$ today'"; ' –

0

Sie können auch eine MySQL-Funktion schreiben, um den Abstand zu berechnen und nur in aufsteigender Reihenfolge abfragen. etwas wie folgt aus:

$sql = "SELECT DISTINCT *, distance($lat1,$lon1) AS dist FROM cinemas WHERE city='$city' ORDER BY dist ASC"; 

Natürlich haben Sie die entsprechenden MySQL-Funktion vorher zu schreiben.

+0

Sie können dies überprüfen, um die Entfernung in SQL zu berechnen: http://stackoverflow.com/questions/24370975/find-distance-between-two-points-use-latitude-and-longitude-in-mysql – meteorite