2012-01-19 9 views
1

になりました。私はループしているテイクアウトの結果セットを持っています。テイクアウェイオブジェクトは、ID、名前、住所、郵便番号、距離、mile_cost、ピザ、中国語、インド、ケバブ。彼らがピザメニューを持っている場合は1を、含まない場合は0を返します。PHPのコード結果は、コードロジック

最も売れているピザ、中国、インド、ケバブのレストランを売るために結果をフィルタリングします。また、結果をフィルタリングして、距離が10より大きく、個々のテイクアウェイの最大到達距離よりも大きい結果を表示しないようにします。

私はmysqlクエリではなくPHPコードでこれを行う必要があります。私はそれを行う方法としてちょっと困っています。これは私が、各タイプの最も近い単一のレストランを得るために、私は彼らにいくつかの方法を注文後、ゼロに最も近い距離を持つものを見つける必要があります推測私がこれまで持っているもの

foreach($takeaway as $takeaway){ 

     $distance = $this->geozip->get_distance($location, $takeaway->postcode);//get the distance between the two postcodes 

     if($distance <= $takeaway->distance && $distance <= 10){ 

      $number = 0; 

      echo $takeaway->name.' is '.$distance.'miles away <br />'; 

     ?> 
      <div class="takeaway_box"> 
       <div class="takeaway_box_band">Indian</div> 

      </div>     
<?php 
     } 
    } 
    ?> 

のですか?

これを行う方法に関するお手伝いがあれば幸いです。

答えて

0

array_filterを使用して結果を絞り込みます。 そして、usortを使用して距離でソートします。例で

function filter_function($takeaway) { 
    return $takeaway->someProperty == 1; // could be your menu; 
} 

function sort_function($a, $b) { 
    // distance must be set before elements are passed trough the sort function 
    $ad = $a->distance; 
    $bd = $b->distance; 

    // sort is ASC 
    if ($ad == $bd) { 
     return 0; 
    } 
    // todo DESC change the < operator to > 
    return ($ad < $bd) ? -1 : 1; 
} 

$takeaways = array_filter($takeaways, filter_function); 
usort($takeaways, sort_function);