首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用PHP的PHP

使用PHP的PHP
EN

Stack Overflow用户
提问于 2015-05-02 03:16:31
回答 1查看 121关注 0票数 0

我使用ba.com格式的航班提供市场信息从xml中检索数据:

代码语言:javascript
运行
复制
$url="https://api.ba.com/rest-v1/v1/flightOfferMktAffiliates;departureDateTimeOutbound=".$Fwk->returnTrueDate($_POST['departureDate']).
                    ";locationCodeOriginOutbound=".$_POST['departureMenu'].
                    ";locationCodeDestinationOutbound=".$_POST['destination'].
                    ";departureDateTimeInbound=".$Fwk->returnTrueDate($_POST['returnDate']).
                    ";locationCodeOriginInbound=".$_POST['destination'].
                    ";locationCodeDestinationInbound=".$_POST['departureMenu'].
                    ";cabin=Economy".
                    ";ADT=".$_POST['adults'].
                    ";CHD=".$_POST['children'].
                    ";INF=0".
                    ";format=.xml";
            $response = curl_get( $url );
            $xml = simplexml_load_string( $response );

我收到这样的消息:

代码语言:javascript
运行
复制
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<OTA_AirLowFareSearchRS xmlns="http://www.opentravel.org/OTA/2003/05">
    <Success xmlns:a="http://www.opentravel.org/OTA/2003/05" xmlns:ns="http://www.ba.com/wsdl/availabilitymanagerv1" xmlns:tns="http://www.ba.com/schema/availabilitymanager/tGetAvailabilityV2"/>
    <PricedItineraries>
        <PricedItinerary SequenceNumber="1">
            <AirItinerary>
                <OriginDestinationOptions>
                    <OriginDestinationOption>
                        <FlightSegment ArrivalDateTime="2015-05-15T11:05:00" DepartureDateTime="2015-05-15T08:25:00" FlightNumber="117" ResBookDesigCode="O">
                            <DepartureAirport LocationCode="LHR" Terminal="5"/>
                            <ArrivalAirport LocationCode="JFK"/>
                            <OperatingAirline CompanyShortName="British Airways"/>
                            <Equipment AirEquipType="744"/>
                            <MarketingAirline Code="BA"/>
                            <TPA_Extensions>
                                <CabinInfo CabinCode="M" CabinName="World Traveller"/>
                            </TPA_Extensions>
                        </FlightSegment>
                    </OriginDestinationOption>
                    <OriginDestinationOption>
                        <FlightSegment ArrivalDateTime="2015-06-15T19:15:00" DepartureDateTime="2015-06-15T07:15:00" FlightNumber="180" ResBookDesigCode="O">
                            <DepartureAirport LocationCode="JFK" Terminal="7"/>
                            <ArrivalAirport LocationCode="LHR"/>
                            <OperatingAirline CompanyShortName="British Airways"/>
                            <Equipment AirEquipType="744"/>
                            <MarketingAirline Code="BA"/>
                            <TPA_Extensions>
                                <CabinInfo CabinCode="M" CabinName="World Traveller"/>
                            </TPA_Extensions>
                        </FlightSegment>
                    </OriginDestinationOption>
                </OriginDestinationOptions>
            </AirItinerary>
...

这就是我理解上述xml时所得到的结果:

代码语言:javascript
运行
复制
foreach($xml->PricedItineraries->PricedItinerary as $item)
            {
                echo "here";
            }

上面的内容返回了大量的“这里”消息,这意味着我可以循环。但是在用$item尝试了各种回显之后,我无法显示任何东西。有人能告诉我,我至少可以如何到达和DepartureAirport,并从它们中读取变量,如ArrivalDateTime和LocationCode。

编辑

开始起作用了。见答案。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-04 00:26:27

对于问题中的xml代码,这个嵌套的foreach将创建一个表布局,并将数据从xml中提取到其中。

代码语言:javascript
运行
复制
        <table>
            <tr>
                <td><label>Departure date</label></td>
                <td><label>Operator</label></td>
                <td><label>Airport</label></td>
                <td><label>Terminal</label></td>
                <td><label>Flight number</label></td>
                <td><label>Return date</label></td>
                <td><label>Operator</label></td>
                <td><label>Airport</label></td>
                <td><label>Terminal</label></td>
                <td><label>Flight number</label></td>
                <td><label>Cost<label></td>
            </tr>


        $i=0;
        $c=0;
        foreach($xml->PricedItineraries->PricedItinerary as $pricedItinerary)
        {
            echo "<tr>";
            foreach($pricedItinerary->AirItinerary->OriginDestinationOptions->OriginDestinationOption as $origin)
            {
            //each cycle through this foreach fills one half of a given row.
                echo "<td id='cell_".$i.",".$c."'>".$origin->FlightSegment->attributes()->DepartureDateTime."</td>";$c++; //Such heresy, much reference
                echo "<td id='cell_".$i.",".$c."'>".$origin->FlightSegment->OperatingAirline->attributes()->CompanyShortName."</td>";$c++;
                echo "<td id='cell_".$i.",".$c."'>".$origin->FlightSegment->DepartureAirport->attributes()->LocationCode."</td>";$c++;
                echo "<td id='cell_".$i.",".$c."'>".$origin->FlightSegment->DepartureAirport->attributes()->Terminal."</td>";$c++;
                echo "<td id='cell_".$i.",".$c."'>".$origin->FlightSegment->attributes()->FlightNumber."</td>";$c++;
            }
            echo "<td id='cell_".$i.",".$c."'>£".$pricedItinerary->AirItineraryPricingInfo->ItinTotalFare->TotalFare->attributes()->Amount."</td>";
            $c=0;//reset counter to 0 to avoid generating numbers too large
            echo "</tr>";
            $i++;
        }

在给定的xml中有两个FlightSegment数组,一个包含到目的地的航班,另一个包含返回的航班。要创建包含这两个FlightSegments的一行数据,您需要在第一行中使用OriginDestinationOption作为参数。在它循环两次之后,主前端将进入另一个PricedItinerary (如果您愿意的话,也可以是SequenceNumber )。

$i$c用于为每个生成的单元提供唯一的id。$i用外部循环迭代,$c用每个<td>元素迭代,并在每一行的末尾重置。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29998005

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档