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

如何在PHP数组循环中获取查询关联值并同步显示子分类与价格?

解决子分类价格显示错误的问题

问题原因分析

你遇到的问题核心在于:循环里的$itsprice变量会被每一行数据不断覆盖,最后所有子分类都只能显示最后一条记录的价格;而且你的$categories数组只存了子分类名称,没有把价格和对应名称绑定在一起,自然无法正确匹配每个子分类的价格。

修改方案

我们需要调整数组的存储结构,把每个子分类的名称和价格作为一组数据保存,这样遍历的时候就能直接获取对应的数据。

修改后的完整代码

$query = mysql_query("SELECT * FROM thing WHERE tol_id='$bid' ORDER BY categoryname, name"); 
$categories = []; 
if(mysql_num_rows($query) > 0){ 
    while($row = mysql_fetch_array($query)) { 
        // 将子分类的名称和价格封装成关联数组,存入对应分类的子数组
        $categories[$row['categoryname']][] = [
            'name' => $row['name'],
            'price' => $row['price']
        ];
    } 
} 
if(!empty($categories)) { 
    foreach($categories as $categoryName => $subCategories) { 
        echo "<div class='stuff'> <p>".$categoryName."</p> <div id='rowstuff'>"; 
        if(!empty($subCategories)) { 
            // 遍历每个包含名称和价格的子元素
            foreach($subCategories as $item) { 
                echo "<div id='name'>".$item['name']."</div> <div id='price'>".$item['price']."</div>"; 
            } 
        } 
        echo "</div></div>"; 
    } 
}

关键修改点说明

  1. 数组存储结构调整:在while循环中,不再单独存储子分类名称,而是把每个子分类的name和price打包成一个关联数组,添加到对应分类的子数组里。这样每个子分类的信息都被完整保留,不会被后续数据覆盖。
  2. 内层遍历逻辑修改:遍历子分类的内层foreach里,直接从$item数组中取出当前子分类的名称和价格,实现了每个子分类和自身价格的一一对应。

额外提示

注意:mysql_*系列函数已经被PHP官方废弃,存在SQL注入等安全风险,建议你尽快迁移到mysqli_*或PDO扩展来操作数据库,同时记得对用户输入(比如这里的$bid)做参数化查询处理,提升代码安全性。

内容的提问来源于stack exchange,提问作者Abhi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:46:17