我试图在foreach循环中打印一些信息:
<?php foreach($output['data']['rooms'] as $info): ?>
<?php if($info['room_number'] == $id): ?>
<h1 style="font-size: 20pt; color: white;">Room: <?php echo $info['room_number']; ?></h1>
<?php echo '<a style="float: right;" class="button1" href="'.$curIndex.'">Home</a>'; ?>
<hr style="margin-top: 20px;">
<?php $services = reset($info['services']); ?>
<h2 style="font-size: 14pt; color: #924c9e;"> Room Charges: <?php echo ($services['room_charges']['enabled'] == 1) ? 'ENABLED' : 'DISABLED'; ?></h2>
<h2 style="font-size: 14pt; color: #924c9e;"> Adult: <?php echo ($services['adult']['enabled'] == 1) ? 'ENABLED' : 'DISABLED'; ?> </h2>
<h2 style="font-size: 14pt; color: #924c9e;"> Room Status: <?php echo $info['status']; ?></h2>
<?php else : echo "No data found for the room number you entered."; ?>
<?php endif; ?>
<?php endforeach; ?>
无法正常工作的部分是<?php else: "no data found for the room number you entered."; ?>
else语句回显了foreach
循环中每个条目的信息,而不仅仅是一次。最简单的解释我想要做的事情:
如果room_number
与用户输入的id
匹配,则打印与该房间号对应的所有内容,否则打印未找到该房间的数据。如果找不到房间号,我只希望"No data found for the room number you entered"
在页面上显示一次。
如果你需要,我可以给你更多的代码,但我认为这应该涵盖它。我还没有能够在else
循环中正确地包含foreach
。
感谢您的帮助!如果你能帮我解决一下,我一定要把答案标记得正确。
答案 0 :(得分:1)
一般来说,我这样做的方式与你的方式略有不同。
// TODO: declare a variable called matchFound and set to false
foreach($output['data']['rooms'] as $info):
if($info['room_number'] == $id):
// TODO: set matchFound = true
// TODO: print out room data
// TODO: break the foreach loop since looping through the remaining records is pointless
endif;
endforeach;
// TODO: if the matchFound variable is false, then print the "No data found for the room number you entered" message
如果您需要澄清,请告诉我。自从我使用PHP以来已经有一段时间了,所以我的语法有点生疏,但如果你自己无法解决这个问题,我可能会想出如何编写“TODO:”行。
编辑,我认为这是正确的语法,它应该有效:
<?php $matchFound = false; ?>
<?php foreach($output['data']['rooms'] as $info): ?>
<?php if($info['room_number'] == $id): ?>
<?php $matchFound = true; ?>
<h1 style="font-size: 20pt; color: white;">Room: <?php echo $info['room_number']; ?></h1>
<?php echo '<a style="float: right;" class="button1" href="'.$curIndex.'">Home</a>'; ?>
<hr style="margin-top: 20px;">
<?php $services = reset($info['services']); ?>
<h2 style="font-size: 14pt; color: #924c9e;"> Room Charges: <?php echo ($services['room_charges']['enabled'] == 1) ? 'ENABLED' : 'DISABLED'; ?></h2>
<h2 style="font-size: 14pt; color: #924c9e;"> Adult: <?php echo ($services['adult']['enabled'] == 1) ? 'ENABLED' : 'DISABLED'; ?> </h2>
<h2 style="font-size: 14pt; color: #924c9e;"> Room Status: <?php echo $info['status']; ?></h2>
<?php break; ?>
<?php endif; ?>
<?php endforeach; ?>
<?php if (!$matchFound): ?>
<?php echo "No data found for the room number you entered."; ?>
<?php endif; ?>
答案 1 :(得分:1)
如果我理解了这种情况,一旦你发现找不到房间,你就想停止循环。
如果是这样,请执行此操作(我在else条件中添加了break语句)。您可能需要封装在使用{}满足else条件时执行的操作。我更喜欢if(条件){先做这个;做第二个;}语法。
无论如何,将break语句作为代码的一部分添加到其他条件时运行应解决问题。
<?php foreach($output['data']['rooms'] as $info): ?>
<?php if($info['room_number'] == $id): ?>
<h1 style="font-size: 20pt; color: white;">Room: <?php echo $info['room_number']; ?></h1>
<?php echo '<a style="float: right;" class="button1" href="'.$curIndex.'">Home</a>'; ?>
<hr style="margin-top: 20px;">
<?php $services = reset($info['services']); ?>
<h2 style="font-size: 14pt; color: #924c9e;"> Room Charges: <?php echo ($services['room_charges']['enabled'] == 1) ? 'ENABLED' : 'DISABLED'; ?></h2>
<h2 style="font-size: 14pt; color: #924c9e;"> Adult: <?php echo ($services['adult']['enabled'] == 1) ? 'ENABLED' : 'DISABLED'; ?> </h2>
<h2 style="font-size: 14pt; color: #924c9e;"> Room Status: <?php echo $info['status']; ?></h2>
<?php else : echo "No data found for the room number you entered."; break;?>
<?php endif; ?>
<?php endforeach; ?>