PHP使用可变变量统计数据库商品类型数量结果异常求助
问题原因
- 核心逻辑层级错误:你将
mysqli_fetch_assoc遍历结果集的while循环写在了$type数组的foreach循环内部。第一次遍历$type的cong元素时,就已经把结果集的所有数据全部读完了,第二次遍历refr元素时,结果集指针已经到末尾,无法再读取到任何行,所以refr只能保留初始值。 - 计数器初始值错误:你给每个
$$type_n设置的初始值是1,正确的初始值应该是0,凭空多了1的统计偏差。 - 统计规则错误:内层foreach匹配到任意商品类型时,都会给当前外层遍历的
$$type_n计数加1,相当于所有行的数量都会累加到第一个遍历的cong计数器上,导致统计值完全不对。
解决方案
推荐更高效的方案:直接在SQL层完成统计,避免PHP循环处理,性能提升明显,代码也更简洁:
SELECT product_type, COUNT(*) AS type_count FROM 你的表名 GROUP BY product_type
执行这条SQL后直接读取结果就能拿到所有类型的统计值,不需要额外循环判断。
如果必须在PHP层处理结果集,正确的代码如下:
<?php // 初始化统计数组,键为类型标识,值为计数,初始为0 $type_stats = [ "cong" => 0, "refr" => 0, ]; // 类型映射关系 $type_map = [ "cong" => "Congélateur", "refr" => "Réfrigérateur", ]; if (mysqli_num_rows($result) > 0) { while ($row = mysqli_fetch_assoc($result)) { // 遍历类型映射匹配当前行的商品类型 foreach ($type_map as $key => $type_name) { if ($row['product_type'] == $type_name) { $type_stats[$key]++; break; // 匹配到就跳出,减少无效遍历 } } } } // 输出结果,也可以直接用extract把$type_stats的键变成变量使用 foreach ($type_stats as $key => $count) { echo $key . "=" . $count . "<br>"; } // 如果需要得到$cong、$refr这类变量,加一行即可 extract($type_stats); ?>
内容的提问来源于stack exchange,提问作者user13393648
相关产品推荐
相关产品推荐

