【问题标题】:Putting an IF statement inside a foreach and missing out entry将 IF 语句放在 foreach 中并丢失条目
【发布时间】:2026-02-15 16:25:02
【问题描述】:

我在从 XML 文件获取数据的 foreach 循环中有一个 IF 语句。然后,我想遍历 XML 文件中的每个条目,如果它不符合特定条件,则跳过将其放入表中。下面的代码只是跳过了每个条目,它返回空白,没有任何东西放在表格中。

PHP 代码:

<table width="500" border="0" cellpadding="5">
<tr>
<?php

$xml=simplexml_load_file("movie.xml") or die("Error: Cannot create object");

foreach($xml->children() as $movie) :

 if($xml->sad<=$_GET['happiness']
 && $xml->agitated<=$_GET['calmness']
 && $xml->tired<=$_GET['tired']
 && $xml->scared<=$_GET['scared'] )
 {?>
   <td align="center" valign="center">
   <img src="<?php echo $movie->path?>" width="150px" alt="<?php echo $movie->descrip?>"/>
   <br />
   <?php echo $movie->name ?>
   </td>
<?php } endforeach; ?>
</tr>
</table>

XML 代码:

<movie>
        <name>Harry Potter</name>
        <path>images/harry.jpg</path>
        <sad>50</sad>
        <agitated>25</agitated>
        <tired>50</tired>
        <scared>75</scared>
</movie>

【问题讨论】:

  • 可能您的 GET 变量和/或 XML 节点被视为字符串,而不是整数,所以
  • 另一个建议:应该例如$xml-&gt;sad&lt;=$_GET['happiness']$movie-&gt;sad&lt;=$_GET['happiness']?
  • 我试过转换它们,但仍然无济于事!我完全被难住了
  • 将它重命名为正确的 $movie 变量已经到了某个地方但没有完全修复它,现在它从显示空白变为只在 else{ 语句中显示我的错误消息!
  • 我已经设法让它只使用一个 IF 语句,但是当我尝试在其中添加其他语句时它只是错误

标签: php html if-statement foreach


【解决方案1】:

认为问题在于您的 XML 文件包含一部电影,因此您的 foreach 不是循环播放多部电影,而是循环播放一个单个的子节点电影。

这是一个我认为应该做你想做的版本:

<table width="500" border="0" cellpadding="5">
<tr>
<?php

$xml=simplexml_load_file(dirname("movie.xml") or die("Error: Cannot create object");

foreach($xml->children() as $movie) :  
 if($movie->sad<=$_GET['happiness']
   && $movie->agitated<=$_GET['calmness']
   && $movie->tired<=$_GET['tired']
   && $movie->scared<=$_GET['scared'] )
   {?>
     <td align="center" valign="center">
     <img src="<?php echo $movie->path?>" width="150px" alt="<?php echo $movie->descrip?>"/>
     <br />
     <?php echo $movie->name ?>
     </td>
  <?php } endforeach; ?>
</tr>
</table>

XML:

<movies>
    <movie>
            <name>Harry Potter</name>
            <path>images/harry.jpg</path>
            <sad>50</sad>
            <agitated>25</agitated>
            <tired>50</tired>
            <scared>75</scared>
    </movie>
    <movie>
            <name>Harry Potter</name>
            <path>images/harry.jpg</path>
            <sad>50</sad>
            <agitated>25</agitated>
            <tired>50</tired>
            <scared>75</scared>
    </movie>
</movies>

注意 xml 文件现在如何包含多个 &lt;movie&gt; 节点,每个节点都在 &lt;movies&gt; 节点内,以及 $xml-&gt;sad 如何变为 $movie-&gt;sad 等。

【讨论】: