如何在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>"; } }
关键修改点说明
- 数组存储结构调整:在
while循环中,不再单独存储子分类名称,而是把每个子分类的name和price打包成一个关联数组,添加到对应分类的子数组里。这样每个子分类的信息都被完整保留,不会被后续数据覆盖。 - 内层遍历逻辑修改:遍历子分类的内层
foreach里,直接从$item数组中取出当前子分类的名称和价格,实现了每个子分类和自身价格的一一对应。
额外提示
注意:mysql_*系列函数已经被PHP官方废弃,存在SQL注入等安全风险,建议你尽快迁移到mysqli_*或PDO扩展来操作数据库,同时记得对用户输入(比如这里的$bid)做参数化查询处理,提升代码安全性。
内容的提问来源于stack exchange,提问作者Abhi
相关产品推荐
相关产品推荐

