Результаты упорядочения PHP в логике кода - PullRequest
1 голос
/ 19 января 2012

Хорошо. У меня есть набор результатов на вынос, который я зацикливаю, объекты на вынос имеют следующие свойства: идентификатор, имя, адрес, почтовый индекс, расстояние, mile_cost, пицца, китайский, индийский, шашлык.Если у них есть меню для пиццы, например, оно будет содержать 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
        } 
    }
  ?>  

Я предполагаю, что для того, чтобы получить ближайший ресторан каждого типа, мне нужно будет найти рестораны с расстоянием, близким к нулю, а затем заказать их как-нибудь?

Любая помощь в том, как это сделать, будет очень признательна.

1 Ответ

0 голосов
/ 19 января 2012

Используйте 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...