如何在循环外部放置与foreach函数相关的文本?

时间:2014-07-04 08:13:56

标签: php xml foreach

我真的不确定如何描述这个,所以请原谅我。

基本上,我正在读取XML,然后生成一个IF语句来检查XML中的所有记录,如果条件匹配,则会显示有关该记录的详细信息。

我想要添加的是一个类似的功能,但相反,但在foreach循环之外,所以它只显示一次。

foreach($xml as $Reader) { $items[] = $Reader; }
$items= array_filter($items, function($Reader) use ($exclude) {
    if($Reader->Picture == 'None' || in_array($Reader->Pin, $exclude)) { 
        return false;
    }   
        return true;
});
usort ($items, function($a, $b) { 
    return strcmp($a->Status,$b->Status); 
});
foreach($items as $Reader) {
    if($Reader->Status == 'Available' && !in_array($Reader->Pin, $exclude)) {
        echo "<a href='/details?Pin=".$Reader->Pin."'>".$Reader->Name ." (".$Reader->Pin.")</a> is available! ...&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
    }
}
if (!$items) { echo "Please check back in a moment when our readers will be available!"; }

因此,在XML文件中,每个Reader都有一个Status,它可以是以下三个值之一:Available,Busy或Logged Off。

所以我正在做的是,对于XML中的每条记录,检查Reader状态是否可用..如果是,请回显上述行。

但我想补充一点,如果没有读者显示为“可用”以回应一行“请稍后再回来查看”。

使用上面的代码,如果在线有四位读者,但他们都很忙......没有显示任何内容。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

只需使用简单的布尔值

$noneAvailable = true;
foreach($items as $Reader) {
    if($Reader->Status == 'Available' && !in_array($Reader->Pin, $exclude)) {
        echo "<a href='/details?Pin=".$Reader->Pin."'>".$Reader->Name ." (".$Reader->Pin.")</a> is available! ...&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
        $noneAvailable = false;
    }
}

if ($noneAvailable) {
  echo "Please check back in a moment";
}

答案 1 :(得分:0)

我设法得到上面给出的答案,并将其与XPath结合起来,根据使用xPath给出的状态过滤XML中的记录。

include TEMPLATEPATH."/extras/get-readers.php";
$readers = $xml->xpath('/ReaderDetails/Reader[Status="Available"]');
$gotOps = false;
foreach ($readers as $Reader)
    {
        echo "<a href='/details?Pin=".$Reader->Pin."'>".$Reader->Name ." (".$Reader->Pin.")</a> is available! ...&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
        $gotOps = true;
    }
if ($gotOps!=true)
    {
        echo 'Please check back in a moment when our readers will be available!';
    }