如何在网页中仅显示PHP数组中的最新元素
问题描述
我想在网页上显示数组中的最新元素,但不知道具体实现方法。而且因为还需要用到数组里的其他元素,所以不能修改现有的SQL查询。我尝试在if语句里用end()函数,但系统提示需要数组参数,$key和$val['idWezen']都不被识别为数组。
我的查询语句
$arrWezen = array(); $query_wezen = "SELECT MythischeWezens.ID as idWezen, MythischeWezens.naam as wezenNaam, Afkomst.ID as idAfkomst, Afkomst.Afkomst as Afkomst FROM MythischeWezens JOIN Afkomst ON MythischeWezens.idAfkomst = Afkomst.ID"; $query_verhalen = "SELECT MythischeWezens.ID as idWezen, MythischeWezens.naam as wezenNaam, Verhaal.ID as idVerhaal, Verhaal.Titel as Titel, Verhaal.Verhaal as Verhaal FROM LinkWezenVerhaal JOIN MythischeWezens ON LinkWezenVerhaal.idWezen = MythischeWezens.ID JOIN Verhaal ON LinkWezenVerhaal.idVerhaal = Verhaal.ID"; $query_traits = "SELECT MythischeWezens.ID as idWezen, MythischeWezens.naam as wezenNaam, Traits.ID as idTrait, Traits.trait as Traits FROM LinkWezenTraits JOIN MythischeWezens ON LinkWezenTraits.idWezen = MythischeWezens.ID JOIN Traits ON LinkWezenTraits.idTrait = Traits.ID"; $result_wezen = $conn->query($query_wezen) or die($conn -> error); $result_verhalen = $conn->query($query_verhalen) or die($conn -> error); $result_traits = $conn->query($query_traits) or die($conn -> error); if($result_wezen->num_rows > 0){ while($row = $result_wezen->fetch_assoc()){ $arrWezen[$row['idWezen']] = array('wezenNaam' => $row['wezenNaam'],'Afkomst' => $row['Afkomst']); } } if($result_verhalen ->num_rows > 0){ while($row = $result_verhalen ->fetch_assoc()){ $arrWezen[$row['idWezen']]['verhaal'][$row['idVerhaal']] = ['Titel' => $row['Titel'], 'Verhaal' => $row['Verhaal']]; } } if ($result_traits->num_rows > 0) { while ($row = $result_traits->fetch_assoc()) { $arrWezen[$row['idWezen']]['traits'][$row['idTrait']] = $row['Traits']; } } ?>
我的函数
<?php include("getWezens.php"); function Wezen($arrWezen){ $returnstring = ""; foreach($arrWezen as $key => $val){ if($val['idWezen'] ==$key){ $returnstring .= "<div class=\"col-md-4\"> <div class=\"card\"> <div class=\"card-body\"> <h5 class=\"card-title\">{$val['wezenNaam']}</h5> <p class=\"card-text\">afkomst: {$val['Afkomst']}</p> </div> </div> </div>"; } } return $returnstring; } ?>
我的首页
<?php include("functions.php"); ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css"> <title>Mythical creatures</title> </head> <body> <!-- Navigation Bar --> <nav class="navbar navbar-expand-lg navbar-light bg-light"> <div class="container"> <a class="navbar-brand" href="#">Your Brand</a> <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation"> <span class="navbar-toggler-icon"></span> </button> <div class="collapse navbar-collapse" id="navbarNav"> <ul class="navbar-nav ml-auto"> <li class="nav-item"> <a class="nav-link" href="#">Home</a> </li> <li class="nav-item"> <a class="nav-link" href="#">About</a> </li> <li class="nav-item dropdown"> <a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false"> Dropdown </a> <ul class="dropdown-menu"> <li><a class="dropdown-item" href="#">Action</a></li> <li><a class="dropdown-item" href="#">Another action</a></li> <li><hr class="dropdown-divider"></li> <li><a class="dropdown-item" href="#">Something else here</a></li> </ul> </li> <li class="nav-item"> <a class="nav-link" href="#">Contact</a> </li> </ul> </div> </div> </nav> <div class="container my-4"> <h1>Dorjee Website</h1> <p>See a bunch of mythical creatures!</p> <h2>Mythical Creatures</h2> <?php print Wezen($arrWezen) ?> </div> <footer class="bg-dark text-light text-center py-3"> <p>© 2023 Your Website. All rights reserved.</p> </footer> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script> </body> </html>
解决方案
首先明确:你之前用end()报错是因为把它用在了单个值($key或$val['idWezen'])上,而end()必须传入整个数组。下面给出两种可行的实现方式:
方式1:单独显示最新元素
直接用end()获取数组最后一个元素,之后记得重置数组指针避免影响后续遍历:
// 获取最新元素 $latestWezen = end($arrWezen); // 重置数组指针 reset($arrWezen);
然后可以写个单独的函数渲染这个元素:
function showLatestWezen($latestWezen) { return "<div class=\"col-md-4\"> <div class=\"card border-primary\"> <div class=\"card-body\"> <h5 class=\"card-title\">{$latestWezen['wezenNaam']}</h5> <p class=\"card-text\">afkomst: {$latestWezen['Afkomst']}</p> <p class=\"card-text text-primary\">最新生物</p> </div> </div> </div>"; }
在首页调用时先显示最新元素,再显示全部:
<?php $latestWezen = end($arrWezen); reset($arrWezen); print showLatestWezen($latestWezen); print Wezen($arrWezen); ?>
方式2:在遍历中标记最新元素
如果要在现有列表里给最新元素加特殊样式,用array_key_last()获取数组最后一个键,遍历的时候判断当前键是否为最后一个:
function Wezen($arrWezen){ $returnstring = ""; $lastKey = array_key_last($arrWezen); foreach($arrWezen as $key => $val){ // 原有的if判断多余,$key本身就是idWezen,可以直接移除 $specialClass = $key == $lastKey ? 'border border-primary' : ''; $latestTag = $key == $lastKey ? '<p class="card-text text-primary">最新生物</p>' : ''; $returnstring .= "<div class=\"col-md-4\"> <div class=\"card {$specialClass}\"> <div class=\"card-body\"> <h5 class=\"card-title\">{$val['wezenNaam']}</h5> <p class=\"card-text\">afkomst: {$val['Afkomst']}</p> {$latestTag} </div> </div> </div>"; } return $returnstring; }
注:如果你的PHP版本低于7.3,用end(array_keys($arrWezen))替代array_key_last($arrWezen)即可。
内容的提问来源于stack exchange,提问作者Simon
相关产品推荐
相关产品推荐

