使用if / else检索xml数据的foreach问题

时间:2013-08-25 02:50:10

标签: php xml if-statement foreach conditional

我一直在寻找SW上我的问题的答案,但到目前为止没有运气......所以它就在这里。 我正在编写一个表单,用户可以在服务器上搜索以xml文件写入的项目...搜索功能运行良好;表单将值发送到php文件,并使用simplexml,它使用带有if / else语句的foreach从xml文件中检索数据。但是,如果在xml文件中找不到任何项目,那就是问题所在。

这是我的php:

<?php
$zip = $_POST['zip'];
$id = $_POST['id'];

$xml = simplexml_load_file("lista.xml");
foreach ($xml as $entry){ 
if (($entry->zipCode == $zip) && ($entry->id == $id)){ 
?>
<p>Id: <?php echo $entry->id;?></p>
<p>Zip: <?php echo $entry->zipCode;?></p>
<p>Item: <?php echo $entry->item;?></p>
<?php
}
else {echo 'nothing found';}
}?>

这是我的xml:

<?xml version="1.0" encoding="utf-8"?>
<entries>
<entry>
<id>id1</id>
<zipCode>zip1</zipCode>
<item>1</item>
</entry>
<entry>
<id>id2</id>
<zipCode>zip2</zipCode>
<item>2</item>
</entry>
<entry>
<id>id3</id>
<zipCode>zip3</zipCode>
<item>3</item>
</entry>
</entries>

问题是,如果整个xml文件中没有项目,则只显示“没有找到”,而不会在每个没有搜索查询的条目中显示“找不到”。 因此,例如,如果$ zip = zip4和$ id = id4,答案是:

nothing found

nothing found

nothing found

而不只是一个'没有找到'

编写这段代码的正确方法是什么? 提前谢谢大家!!!

1 个答案:

答案 0 :(得分:2)

使用变量来跟踪您是否找到了任何内容。

$found = false;

foreach ($xml as $entry){ 
    if (($entry->zipCode == $zip) && ($entry->id == $id)){ 
        $found = true;
    ?>
    <p>Id: <?php echo $entry->id;?></p>
    <p>Zip: <?php echo $entry->zipCode;?></p>
    <p>Item: <?php echo $entry->item;?></p>
    <?php
    }
}
if (!$found) {
    echo 'nothing found';
}