我真的不确定如何描述这个,所以请原谅我。
基本上,我正在读取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! ... ";
}
}
if (!$items) { echo "Please check back in a moment when our readers will be available!"; }
因此,在XML文件中,每个Reader都有一个Status,它可以是以下三个值之一:Available,Busy或Logged Off。
所以我正在做的是,对于XML中的每条记录,检查Reader状态是否可用..如果是,请回显上述行。
但我想补充一点,如果没有读者显示为“可用”以回应一行“请稍后再回来查看”。
使用上面的代码,如果在线有四位读者,但他们都很忙......没有显示任何内容。
有什么想法吗?
答案 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! ... ";
$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! ... ";
$gotOps = true;
}
if ($gotOps!=true)
{
echo 'Please check back in a moment when our readers will be available!';
}