You need to enable JavaScript to run this app. PHP使用可变变量统计数据库商品类型数量结果异常求助
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 07:15:03