You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在网页中仅显示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>&copy; 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 21:25:55