2015-06-30 2 views
3

Мне нужна помощь в переходе через набор объектов, представляющих предложения рейсов от страны a до b, и каждый маршрут может содержать несколько предложений. Я хочу получить самое низкое предложение полета для каждого маршрута ... Я просто не знаю, как это сделать внутри цикла. Это Answer on SO Я пробовал работы даст мне самую низкую цену, но как я могу получить весь массив этой цены? Я знаю, это звучит глупо, но я застрял.PHP петля и получить самую низкую цену

$results = array(); 
$offers = R::getAll("SELECT * FROM fares WHERE available = 1 LIMIT 4"); 

$offers вернулся набор данных образца размещены здесь на Fiddle

тогда я сделал следующее:

foreach($offers as $key=>$val){ 
      $results ['city'] = $val["name"]; 
      $results ['country'] = $val["parent_name"]; 
      $off = json_decode($val["Flights"]); 
      var_dump($off); 

      // here I need to loop through $off & grab the lowest 
     } 

    return $results; 

$off свалка возвращает следующую

object(stdClass)#60 (1) { 
    ["BEY"]=> 
    array(4) { 
    [0]=> 
    object(stdClass)#61 (6) { 
     ["price"]=> 
     int(490) 
     ["airline"]=> 
     string(2) "ME" 
     ["flight_number"]=> 
     int(276) 
     ["departure_at"]=> 
     string(20) "2015-07-11T12:20:00Z" 
     ["return_at"]=> 
     string(20) "2015-07-18T08:20:00Z" 
     ["expires_at"]=> 
     string(20) "2015-06-30T14:31:43Z" 
    } 
    [1]=> 
    object(stdClass)#62 (6) { 
     ["price"]=> 
     int(639) 
     ["airline"]=> 
     string(2) "FZ" 
     ["flight_number"]=> 
     int(716) 
     ["departure_at"]=> 
     string(20) "2015-07-05T15:50:00Z" 
     ["return_at"]=> 
     string(20) "2015-07-12T04:30:00Z" 
     ["expires_at"]=> 
     string(20) "2015-07-01T08:11:49Z" 
    } 
    [2]=> 
    object(stdClass)#63 (6) { 
     ["price"]=> 
     int(472) 
     ["airline"]=> 
     string(2) "EY" 
     ["flight_number"]=> 
     int(299) 
     ["departure_at"]=> 
     string(20) "2015-07-18T03:10:00Z" 
     ["return_at"]=> 
     string(20) "2015-07-28T04:30:00Z" 
     ["expires_at"]=> 
     string(20) "2015-06-30T12:20:30Z" 
    } 
    [3]=> 
    object(stdClass)#64 (6) { 
     ["price"]=> 
     int(2045) 
     ["airline"]=> 
     string(2) "SU" 
     ["flight_number"]=> 
     int(1861) 
     ["departure_at"]=> 
     string(20) "2015-07-11T14:50:00Z" 
     ["return_at"]=> 
     string(20) "2015-07-18T05:05:00Z" 
     ["expires_at"]=> 
     string(20) "2015-06-30T14:31:43Z" 
    } 
    } 
} 

object(stdClass)#65 (1) { 
    ["BEY"]=> 
    object(stdClass)#66 (3) { 
    ["1"]=> 
    object(stdClass)#67 (6) { 
     ["price"]=> 
     int(1903) 
     ["airline"]=> 
     string(2) "EY" 
     ["flight_number"]=> 
     int(461) 
     ["departure_at"]=> 
     string(20) "2015-07-17T22:40:00Z" 
     ["return_at"]=> 
     string(20) "2015-07-31T04:30:00Z" 
     ["expires_at"]=> 
     string(20) "2015-07-01T10:46:41Z" 
    } 
    ["2"]=> 
    object(stdClass)#68 (6) { 
     ["price"]=> 
     int(1535) 
     ["airline"]=> 
     string(2) "QF" 
     ["flight_number"]=> 
     int(341) 
     ["departure_at"]=> 
     string(20) "2015-07-17T11:00:00Z" 
     ["return_at"]=> 
     string(20) "2015-07-31T22:55:00Z" 
     ["expires_at"]=> 
     string(20) "2015-07-01T10:46:41Z" 
    } 
    ["3"]=> 
    object(stdClass)#69 (6) { 
     ["price"]=> 
     int(2321) 
     ["airline"]=> 
     string(2) "AY" 
     ["flight_number"]=> 
     int(5014) 
     ["departure_at"]=> 
     string(20) "2015-07-17T11:45:00Z" 
     ["return_at"]=> 
     string(20) "2015-07-31T22:55:00Z" 
     ["expires_at"]=> 
     string(20) "2015-07-01T10:46:41Z" 
    } 
    } 
} 
ect ..... 

Любая идея?

Спасибо большое!

+0

В соответствии с результатом '$ off' это не один объект. Он содержит более одного объекта. Итак, какой именно ответ вы хотите? –

+0

@Awena, можете ли вы использовать структуру таблицы, которую вы используете, и, пожалуйста, покажите данные в чистом массиве, а не в объектах. –

+0

Схватить предложение о низком полете для каждого маршрута - это отличная работа для SQL. –

ответ

2

Попробуйте это:

foreach($offers as $key=>$val){ 
    $results ['city'] = $val["name"]; 
    $results ['country'] = $val["parent_name"]; 

    $off = json_decode($val["Flights"], true); //note the true 

    $lowest = PHP_INT_MAX; 
    foreach ($off['BEY'] as $item) 
     $lowest = min($item['price'], $lowest); 

    //now $lowest is the lowest price 

    $lowest_item = null; 
    foreach ($off['BEY'] as $item) 
     if ($item['price'] == $lowest) { 
      $lowest_item = $item; 
      break; 
     } 

    //now you can do something with $lowest_item, like $lowest_item['flight_number'] 
} 
+0

Спасибо, сэр! наконец, кто-то читает вопрос перед публикацией! Я ценю это Дэйв. Приветствия – Awena

3

Я думаю, что вы можете пропустить последнюю петлю.

<?php 
foreach ($offers as $key => $val) { 
    $results['city'] = $val["name"]; 
    $results['country'] = $val["parent_name"]; 
    $off = json_decode($val["Flights"], true); 

    $lowest = PHP_INT_MAX; 
    $lowest_item = null; 
    foreach ($off['BEY'] as $item) { 
     $lowest = min($item['price'], $lowest); 
     if ($item['price'] == $lowest) { 
      $lowest_item = $item; 
     } 
    } 
    // Now $lowest is the lowest price and 
    // you can do something with $lowest_item, 
    // like $lowest_item['flight_number']. 
} 
+0

Спасибо Koredalin – Awena

+1

Добро пожаловать! – koredalin

Смежные вопросы