带条件的嵌套 foreach 语句

Nested foreach statements with conditional

我有以下XML数据:

<MEET>
    <CLASS>
        <NAME>Professional</NAME>
    </CLASS>
    <CLASS>
        <NAME>Amateur</NAME>
    </CLASS>
    <EVENT>
        <NAME>Event One</NAME>
    </EVENT>
    <EVENT>
        <NAME>Event Two</NAME>
    </EVENT>
    <EVENT>
        <NAME>Event Three</NAME>
    </EVENT>
    <ATHLETE>
        <NAME>Joe Smith</NAME>
        <ADDRESS>123 Main St, Anytown, NY 12121</ADDRESS>
        <EMAIL>joe@smith.com</EMAIL>
        <PHONE>518-555-1234</PHONE>
        <EMERGENCYNAME>Jane Smith</EMERGENCYNAME>
        <EMERGENCYPHONE>518-555-5678</EMERGENCYPHONE>
        <CLASS>Amateur</CLASS>
    </ATHLETE>
</MEET>

以及以下 PHP:

<?php
$xml = simplexml_load_file('url');
foreach ($xml->CLASS as $classes) {
    echo '<h1>'.$classes->NAME.'</h1>';
    foreach ($xml->EVENT as $events) {
        echo '<h2>'.$classes->NAME.': '.$events->NAME.'</h2>';
        foreach($xml->ATHLETE as $athletes) {
            if (strpos($athletes->CLASS, $classes->NAME) !== false) {
                echo $athletes->NAME;
            }
        }
    }
}
?>

而且我无法在 H1 Amateur 标题下、H2 Amateur: Event One Amateur: Event TwoAmateur: Event Three 子标题下输出 Joe Smith 的名字。

如果我用 Amateur 替换 strpos 中的 $needle,它会在 BOTH 类 的每个事件中输出 Joe Smith。

如果你使用var_dump函数来查看你的变量实例是什么,它可以告诉你$athletes->CLASS$classes->NAME的类型是SimpleXMLElement

如果您想将它们放在一起进行比较,您必须将 if 语句更改为如下内容:

if (strpos($athletes->CLASS->__toString(), $classes->NAME->__toString()) !== false) {
    echo $athletes->NAME;
}