You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP按XML节点type值筛选分类进港/离港航班数据实现方法

WordPress下按类型分栏展示XML进港/离港航班实现方案

实现逻辑

你现有代码直接按固定索引读取航班节点,没有做类型判断,因此无法区分进港、离港数据。实现分类展示只需要两步:

  • 加载XML后,按<type>节点的取值把航班数据拆分为进港、离港两个数据集
  • 用简单的HTML两列布局,分别渲染两个数据集的内容即可

可直接使用的代码(适配PHPCode Snippets插件)

你可以直接把下面代码粘贴到snippet中执行,已经适配WordPress环境,自带基础两列样式,你可以根据需要调整展示的字段和样式:

<?php
// 开启XML错误捕获,避免远程加载失败导致页面报错
libxml_use_internal_errors(true);

// 加载远程XML文件,替换成你自己的XML地址
$xml = new SimpleXMLElement('https://XXX/fids.xml', null, true);

if (!$xml) {
    echo "航班数据加载失败,请稍后重试";
    libxml_clear_errors();
    return;
}

// 方法1:用XPath直接筛选对应类型的航班,无需手动循环
$arrivalFlights = $xml->xpath('//flight[type="arrival"]');
$departureFlights = $xml->xpath('//flight[type="departure"]');

/* 方法2:如果不想用XPath,也可以手动遍历分组
$arrivalFlights = [];
$departureFlights = [];
foreach ($xml->flight as $item) {
    if ((string)$item->type === 'arrival') {
        $arrivalFlights[] = $item;
    } elseif ((string)$item->type === 'departure') {
        $departureFlights[] = $item;
    }
}
*/
?>
<!-- 两列布局容器 -->
<div style="display: flex; gap: 2rem; flex-wrap: wrap; margin: 2rem 0;">
    <!-- 进港航班列 -->
    <div style="flex: 1; min-width: 300px;">
        <h3>进港航班</h3>
        <table style="width: 100%; border-collapse: collapse;">
            <thead>
                <tr>
                    <th style="border: 1px solid #eee; padding: 8px; text-align: left;">航班号</th>
                    <th style="border: 1px solid #eee; padding: 8px; text-align: left;">航司</th>
                    <th style="border: 1px solid #eee; padding: 8px; text-align: left;">始发机场</th>
                    <th style="border: 1px solid #eee; padding: 8px; text-align: left;">计划到港时间</th>
                </tr>
            </thead>
            <tbody>
                <?php foreach ($arrivalFlights as $flight): ?>
                <tr>
                    <td style="border: 1px solid #eee; padding: 8px;"><?php echo (string)$flight->iata; ?></td>
                    <td style="border: 1px solid #eee; padding: 8px;"><?php echo (string)$flight->airline->name; ?></td>
                    <td style="border: 1px solid #eee; padding: 8px;"><?php echo (string)$flight->airport->name; ?></td>
                    <td style="border: 1px solid #eee; padding: 8px;"><?php echo (string)$flight->scheduleddate . ' ' . (string)$flight->scheduledtime; ?></td>
                </tr>
                <?php endforeach; ?>
                <?php if (empty($arrivalFlights)): ?>
                <tr>
                    <td colspan="4" style="border: 1px solid #eee; padding: 8px; text-align: center;">暂无进港航班</td>
                </tr>
                <?php endif; ?>
            </tbody>
        </table>
    </div>

    <!-- 离港航班列 -->
    <div style="flex: 1; min-width: 300px;">
        <h3>离港航班</h3>
        <table style="width: 100%; border-collapse: collapse;">
            <thead>
                <tr>
                    <th style="border: 1px solid #eee; padding: 8px; text-align: left;">航班号</th>
                    <th style="border: 1px solid #eee; padding: 8px; text-align: left;">航司</th>
                    <th style="border: 1px solid #eee; padding: 8px; text-align: left;">目的地机场</th>
                    <th style="border: 1px solid #eee; padding: 8px; text-align: left;">计划离港时间</th>
                </tr>
            </thead>
            <tbody>
                <?php foreach ($departureFlights as $flight): ?>
                <tr>
                    <td style="border: 1px solid #eee; padding: 8px;"><?php echo (string)$flight->iata; ?></td>
                    <td style="border: 1px solid #eee; padding: 8px;"><?php echo (string)$flight->airline->name; ?></td>
                    <td style="border: 1px solid #eee; padding: 8px;"><?php echo (string)$flight->airport->name; ?></td>
                    <td style="border: 1px solid #eee; padding: 8px;"><?php echo (string)$flight->scheduleddate . ' ' . (string)$flight->scheduledtime; ?></td>
                </tr>
                <?php endforeach; ?>
                <?php if (empty($departureFlights)): ?>
                <tr>
                    <td colspan="4" style="border: 1px solid #eee; padding: 8px; text-align: center;">暂无离港航班</td>
                </tr>
                <?php endif; ?>
            </tbody>
        </table>
    </div>
</div>

代码说明

  • 优先使用XPath方法筛选数据,代码更简洁,性能和手动遍历一致
  • 读取SimpleXML节点值时统一用(string)做强制类型转换,避免返回对象导致的输出异常
  • 布局用flex实现响应式两列,移动端会自动堆叠为单列,适配WordPress绝大多数主题
  • 内置了空数据判断和XML加载错误捕获,不会出现空白或者报错问题
  • 你可以根据自己的需求增删表格字段,或者调整CSS样式匹配站点风格

如果你需要把航班数据做成短代码插入到文章/页面,只需要把上述逻辑包裹在短代码回调函数里,用add_shortcode注册即可,不需要修改核心逻辑。

内容的提问来源于stack exchange,提问作者Mattias

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 18:39:34