Autor Zpráva
chudst
Profil
Dobrý den, moc prosím o pomoc se seřazením polí.

Mám dvě pole - vzdálenost a informace k bodu zájmu. Těchto bodů mám libovolné množství (od žádného po X v závislosti na lokaci, kde se vyskytuji). Potřebuji, pokud mám bodů více, aby se jich zobrazilo prvních 40 podle vzdálenosti (nejbližší napřed).

<?php
  // Vzdálenost mezi mnou a POI 
$distancePOI[$countpoi] = $distance;
    
    //Tvorba bodu zájmu
$poi[$countpoi] = ArelXMLHelper::createLocationBasedPOI($i, $title, explode(",", $findPOI[0]), "http://vsohbrno.chudst.cz/poi/poi_obrazek.png", "http://vsohbrno.chudst.cz/poi/poi_obrazek.png", $attribution[$countpoi], NULL);
?>

Zkoušel jsem seřadit body dle vzdálenosti (zatím netestováno, zda-li funguje):

<?php
  //Seřazení bodů dle vzdálenosti od nejmenšího po největší      
   $POInearby = asort($distancePOI);
?>

Ale nyní mám problém, jak to udělat, aby se zobrazovaly pouze nejbližší body. Pokud vypíšu tento skript, v pořádku se mi ukáže pouze 40 bodů, ale tak, jak jsou seřazeny v databázi, nikoli dle vzdálenosti. (Jednoduše proto, že ji tam nemám dosazenou, nevím jak.):

<?php   
  foreach ($POInearby as $POInumber => $POIvalue)
  {
    if($POInumber < 40){
     if(!empty($filter))
     {
         if(strtolower($filter) == strtolower($attribution[$POInumber]))
         {
            ArelXMLHelper::outputObject($poi[$POInumber]); // pomocí externího souboru vytvoří XML verzi
        }        
    } 
     else
         {ArelXMLHelper::outputObject($poi[$POInumber]);}  // pomocí externího souboru vytvoří XML verzi
    }     
  } 
</php>

Jednoduše příklad:
$distancePOI[0] = 1km, a s tím spojené $poi[0] = ArelXMLHelper::createLocationBasedPOI(blabla, blabla. blabla); 
$distancePOI[1] = 5km, a s tím spojené $poi[1] = ArelXMLHelper::createLocationBasedPOI(bleble, bleble, bleble); 
$distancePOI[2] = 2km, a s tím spojené $poi[2] = ArelXMLHelper::createLocationBasedPOI(blublu, blublu, blublu);
Pokud seřadím $distancePOI dle vzdálenosti ($POInearby = asort($distancePOI);), dostanu
$POInearby[0] = 1km, >$poi[0] = ArelXMLHelper::createLocationBasedPOI(blabla, blabla. blabla); 
$POInearby[1] = 2km, >$poi[1] = ArelXMLHelper::createLocationBasedPOI(bleble, bleble, bleble); 
$POInearby[2] = 5km, > $poi[2] = ArelXMLHelper::createLocationBasedPOI(blublu, blublu, blublu);

místo
$POInearby[0] = 1km, >$poi[0] = ArelXMLHelper::createLocationBasedPOI(blabla, blabla. blabla); 
$POInearby[1] = 2km, > $poi[2] = ArelXMLHelper::createLocationBasedPOI(blublu, blublu, blublu);
$POInearby[2] = 5km, >$poi[1] = ArelXMLHelper::createLocationBasedPOI(bleble, bleble, bleble);

Děkuji moc za případnou radu!
Alphard
Profil
V první řadě se nabízí otázka, proč to neřadit správně již v databázi.
Když už by se to mělo řadit v php se dvěma poli, můžete to udělat takto. První vzdálenostní pole ve tvaru identifikátor => vzdálenost, seřadit pomocí asort() tak jak to děláte a při výpisu procházet totéž pole, ale hodnoty brát z druhého.

foreach ($distancePOI as $key => $distance)
{
  $POInearby[$key];
}
Důležité je, aby klíče u obou polí byly u párových položek vždy stejné.
chudst
Profil
Díky Vám moc, Alpharde, nakoplo mě to - již to funguje.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: