2016-09-29 115 views
0

我一直在努力解決這個問題兩天,現在正在打磚牆。我有一個具有飛行路線在那裏我有飛行使用Skyscanner陣列帶嵌套鍵的嵌套foreach

Leg - being Itineraries -> OutboundLegId - 

而且腿,顯示了航班號 - 是

Legs -> FlightNumbers -> FlightNumber. 

我所試圖實現的是顯示行程然後加入航班號。但不管我嘗試什麼,我都無法讓這個工作。我已經閱讀了關於Keys的所有內容,並嘗試了大量的例子,但沒有提供任何內容。請有人指點我正確的方向嗎?下面

[Itineraries] => Array 
(
    [0] => Array 
     (
      [OutboundLegId] => 13542-1610140610-29-0-13445-1610141240 
      [InboundLegId] => 13445-1610211340-29-0-13542-1610211640 
      [PricingOptions] => Array 
       (
        [0] => Array 
         (
          [Agents] => Array 
           (
            [0] => 2174187 
           ) 

          [QuoteAgeInMinutes] => 31 
          [Price] => 200.98 
          [DeeplinkUrl] => http://partners.api.skyscanner.net/apiservices/deeplink/v2?_cje=5JlLCgyPUKY0hT8T0Ybh6dL0Xf0htAiHTFX7RU79eeI3XvrsxvEqP1QUJAoHiHRd&url=http%3a%2f%2fwww.apideeplink.com%2ftransport_deeplink%2f4.0%2fUK%2fen-gb%2fGBP%2fcook%2f2%2f13542.13445.2016-10-14%2c13445.13542.2016-10-21%2fair%2fairli%2fflights%3fitinerary%3dflight%7c-32294%7c1152%7c13542%7c2016-10-14T06%3a10%7c13445%7c2016-10-14T12%3a40%2cflight%7c-32294%7c1153%7c13445%7c2016-10-21T13%3a40%7c13542%7c2016-10-21T16%3a40%26carriers%3d-32294%26passengers%3d1%2c0%2c0%26channel%3ddataapi%26cabin_class%3deconomy%26facilitated%3dfalse%26ticket_price%3d200.98%26is_npt%3dfalse%26is_multipart%3dfalse%26client_id%3dskyscanner_b2b%26request_id%3d3bc96bda-fd7c-403a-b841-2ccc3c26071d%26commercial_filters%3dfalse%26q_datetime_utc%3d2016-09-29T08%3a18%3a27 
         ) 

[Legs] => Array 
(
    [0] => Array 
     (
      [Id] => 13542-1610140610-29-0-13445-1610141240 
      [SegmentIds] => Array 
       (
        [0] => 1 
       ) 

      [OriginStation] => 13542 
      [DestinationStation] => 13445 
      [Departure] => 2016-10-14T06:10:00 
      [Arrival] => 2016-10-14T12:40:00 
      [Duration] => 270 
      [JourneyMode] => Flight 
      [Stops] => Array 
       (
       ) 

      [Carriers] => Array 
       (
        [0] => 105 
       ) 

      [OperatingCarriers] => Array 
       (
        [0] => 105 
       ) 

      [Directionality] => Outbound 
      [FlightNumbers] => Array 
       (
        [0] => Array 
         (
          [FlightNumber] => 1152 
          [CarrierId] => 105 
         ) 

       ) 

     ) 
+0

請提供的例子,你想實現 – Dmytrechko

+0

結果的一個更復雜的只有兩個我能之間的鏈接請參閱腿號和起點/終點站的前5位數字。其餘的似乎來自其他地方的結果數組。那究竟是什麼問題? –

+0

我只需要加入行程上的兩個數組 - > OutboundLegId和Legs - > Id,然後我可以檢索航班號。我有一個循環遍歷所有行程沒有問題的foreach循環 - 但我不明白如何加入第二個數組 – Dean

回答

0

假設這是一個很大的數組,其名爲$data可以嵌套幾個foreach循環的。

我使用foreach循環,我認爲存在以下情況:這個數據結構得到比你展示

foreach ($data['Itineraries'] as $itin) { 

    foreach ($data['Legs'] as $legs) { 
     if ($legs['Id'] == $itin['OutboundLegId']) { 

      // we matched the itinerary with a leg 
      echo $legs['OutboundLegId'] . ' ' . $legs['FlightNumbers'][0]['FlightNumber']; 

     } 
    } 
} 
+0

您可以使用array_column對您的一個數組進行排序 - 它允許您擺脫或嵌套foreach。 查看排序腿的示例。 – Dmytrechko

+0

@Dmytrechko我假設,如果這個問題已經被問到,像你的答案一樣優雅的東西只會擋住OP,所以我選擇了簡單 – RiggsFolly

+0

哈哈。是的,簡單是關鍵的傢伙:-)我會放棄一切,讓你知道我如何繼續。謝謝 – Dean

0

例陣列使用它作爲草案。沒有反饋就無法執行功能。 把適當的陣列,而不是{YOUR-ARRAY-WITH腿}和{YOUR-ARRAY-WITH-,觸控式}

$sortedLegs = array_column('Id', {YOUR-ARRAY-WITH-LEGS}); 

$joinedArray = array_map(function($itinerary) use($sortedLegs){ 
    if(array_key_exists($itinerary['OutboundLegId'],$sortedLegs)) { 
     $itinerary['legs'] = $sortedLegs[$itinerary['OutboundLegId']]; 
    } 
    return $itinerary; 
},{YOUR-ARRAY-WITH-ITINERARIES}); 
+0

這會引發一個錯誤Dmytrechko。如果有幫助,我的數組被稱爲$數組? – Dean

+0

查看編輯答案 – Dmytrechko

+0

因此對於{YOUR-ARRAY-WITH-LEGS}我會用$ array作爲數組名來替換{$ array ['Legs'] ['Id']}? – Dean