带条件的嵌套 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 Two
和 Amateur: 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;
}
我有以下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 Two
和 Amateur: 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;
}