2016-09-29 113 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