Sortowanie tablic z uwzględnieniem specyficznych potrzeb aplikacji – sortowanie geograficzne

Sortowanie tablic z uwzględnieniem specyficznych potrzeb aplikacji – sortowanie geograficzne

Założenie: Posortujemy listę miast według odległości od punktu odniesienia, wykorzystując wzór Haversine’a do obliczenia odległości.

Krok po kroku:

  1. Przygotowanie danych: Zdefiniujmy tablicę z danymi miast (nazwa, szerokość geograficzna, długość geograficzna) oraz współrzędne punktu odniesienia.
  2. 
    $cities = [
        ['name' => 'Warszawa', 'lat' => 52.2297, 'lng' => 21.0122],
        ['name' => 'Kraków', 'lat' => 50.0647, 'lng' => 19.9450],
        ['name' => 'Gdańsk', 'lat' => 54.3520, 'lng' => 18.6466],
        ['name' => 'Wrocław', 'lat' => 51.1079, 'lng' => 17.0385]
    ];
    
    $referencePoint = ['lat' => 51.5074, 'lng' => 0.1278]; // Przykładowy punkt w Londynie
    
    				
  3. Funkcja obliczająca odległość za pomocą wzoru Haversine’a: Stwórzmy funkcję, która obliczy odległość między dwoma punktami na kuli ziemskiej.
  4. 
    function haversineDistance($lat1, $lon1, $lat2, $lon2) {
      $R = 6371; // Promień Ziemi w kilometrach
      $lat1 = deg2rad($lat1);
      $lon1 = deg2rad($lon1);
      $lat2 = deg2rad($lat2);
      $lon2 = deg2rad($lon2);
    
      $dlat = $lat2 - $lat1;
      $dlon = $lon2 - $lon1;
    
      $a = sin($dlat / 2) * sin($dlat / 2) + cos($lat1) * cos($lat2) * sin($dlon / 2) * sin($dlon / 2);
      $c = 2 * atan2(sqrt($a), sqrt(1 - $a));
      $distance = $R * $c;
      return $distance;
    }
    				
  5. Sortowanie tablicy: Użyjmy funkcji `usort` do posortowania tablicy `$cities` według odległości od punktu odniesienia.
  6. 
    usort($cities, function ($a, $b) use ($referencePoint) {
      $distanceA = haversineDistance($a['lat'], $a['lng'], $referencePoint['lat'], $referencePoint['lng']);
      $distanceB = haversineDistance($b['lat'], $b['lng'], $referencePoint['lat'], $referencePoint['lng']);
      return $distanceA - $distanceB; // Sortowanie rosnąco
    });
    				
  7. Wyświetlenie wyników: Wyświetlmy posortowaną tablicę.
  8. 
    foreach ($cities as $city) {
      $distance = haversineDistance($city['lat'], $city['lng'], $referencePoint['lat'], $referencePoint['lng']);
      echo $city['name'] . ' - Odległość: ' . round($distance, 2) . ' km' . "
    "; }

Ten przykład pokazuje, jak sortować tablice w PHP w oparciu o bardziej złożone kryteria niż proste porównanie wartości. Zachęcamy do eksperymentowania z różnymi funkcjami sortowania i kryteriami, aby lepiej zrozumieć możliwości PHP.

Dodaj komentarz 0

Your email address will not be published. Required fields are marked *