好的,我有一个我正在循环的外卖结果集,外卖对象有以下属性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);