PHP排序导致代码逻辑


PHP ordering results in the code logic

好的,我有一个我正在循环的外卖结果集,外卖对象有以下属性id、名称、地址、邮政编码、距离、里程成本、披萨、中国菜、印度菜、烤串。例如,如果他们有披萨菜单,它将包含1或0(如果不是)等

我想过滤结果,以获得最接近的单一披萨、中国、印度和烤串销售餐厅。但也要过滤结果,使其不会显示距离大于10且大于单个外卖最大配送距离的结果。

我必须在php代码中而不是在mysql查询中这样做,我有点困惑于如何做到这一点

 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
        } 
    }
  ?>  

我想,为了找到每种类型中距离最近的一家餐厅,我必须找到距离最接近零的餐厅,然后点餐?

如果能为我们提供帮助,我们将不胜感激。

使用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);