修复PHP代码:统计各Cluster中kondisi列数值分布(结果为0问题)
修复K-means聚类结果中各Cluster的Kondisi值统计问题
常见问题排查与修复步骤
1. 确认Session已正确开启
在读取$_SESSION['kmeans_result']前,必须在代码最开头调用session_start(),否则无法获取Session中的数据集,统计结果自然会全部为0。
2. 验证数据集结构
先打印数据集的实际结构,确认数据已正确加载,且每个元素包含cluster和kondisi字段:
session_start(); // 调试用:输出数据集结构,确认数据格式 echo "<pre>"; print_r($_SESSION['kmeans_result']); echo "</pre>";
正常的数据集结构应类似:
Array ( [0] => Array ( [cluster] => 0 [kondisi] => 1 // 其他字段... ) [1] => Array ( [cluster] => 0 [kondisi] => 2 // 其他字段... ) // 更多数据条目... )
3. 修复统计逻辑错误
假设你的原代码存在统计变量重置、类型不匹配或分组逻辑错误,以下是修复后的完整代码:
session_start(); // 初始化Cluster统计容器,自动适配所有存在的Cluster编号 $clusterStats = []; // 遍历所有数据,按Cluster分组统计Kondisi数量 foreach ($_SESSION['kmeans_result'] as $data) { $clusterId = $data['cluster']; // 统一转为数字类型,避免字符串与数字比较的不匹配问题 $kondisi = (int)$data['kondisi']; // 若当前Cluster未初始化统计项,先创建初始值 if (!isset($clusterStats[$clusterId])) { $clusterStats[$clusterId] = [ 'baik' => 0, 'sedang' => 0, 'buruk' => 0 ]; } // 根据Kondisi值累加对应统计项 switch ($kondisi) { case 1: $clusterStats[$clusterId]['baik']++; break; case 2: $clusterStats[$clusterId]['sedang']++; break; case 3: $clusterStats[$clusterId]['buruk']++; break; // 可选:处理未知Kondisi值的情况 default: break; } } // 遍历每个Cluster,输出独立统计表格 foreach ($clusterStats as $clusterId => $stats) { echo "<h3>Cluster {$clusterId}</h3>"; echo "<table border='1'>"; echo "<tr><th>Kondisi</th><th>数量</th></tr>"; echo "<tr><td>Baik (1)</td><td>{$stats['baik']}</td></tr>"; echo "<tr><td>Sedang (2)</td><td>{$stats['sedang']}</td></tr>"; echo "<tr><td>Buruk (3)</td><td>{$stats['buruk']}</td></tr>"; echo "</table><br>"; }
4. 关键修复点说明
- Session初始化:确保
session_start()在任何输出之前执行,否则无法读取Session数据 - 统计变量作用域:将统计容器放在循环外部,避免每次循环重置统计值
- 类型统一:强制将
kondisi转为数字类型,解决字符串与数字比较的匹配问题 - 分组统计逻辑:先一次性完成所有Cluster的统计,再逐个输出表格,避免重复遍历数据
内容的提问来源于stack exchange,提问作者G.PAUDRA
相关产品推荐
相关产品推荐

