PHP生成Excel考勤报表时Hours Assigned重复显示问题求助
解决PHP考勤报表中“Hours Assigned”重复显示的问题
问题原因
你当前的代码将Hours Assigned的输出逻辑放在了while循环内部,导致每遍历一条数据库记录就会打印一次该标题,自然会在多条记录时重复显示。
修复方案
只需要将Hours Assigned的输出代码移到循环之外,或者通过一个标志控制只打印一次即可。以下提供两种实现方式:
方式1:先打印标题再遍历所有记录(推荐,适合同讲师同课程的tot_hr一致的场景)
else if( $num_results > 0) { // 先获取第一条记录的分配时长并打印标题 $first_row = $result->fetch_assoc(); extract($first_row); $hourstot = floor($tot_hr / 3600); $minutestot = floatval(($tot_hr / 60) % 60); echo "<h4 class='text-muted font-15 m-b-15'> <b>* Hours Assigned : $hourstot : $minutestot </b></h4>"; echo "<h4 class='text-muted font-15 m-b-15'> <b>----------------------------------------------------------------------------------------------------- </b></h4>"; // 输出第一条记录的行数据 echo "<tr>"; $hours = floor($first_row['to_time'] / 3600); $minutes = floor(($first_row['to_time'] / 60) % 60); echo "<td></td>"; echo "<td>{$first_row['rdate']}</td>"; echo "<td>{$first_row['s_time']}</td>"; echo "<td>{$first_row['e_time']}</td>"; echo "<td>$hours h : $minutes m </td>"; echo "<td>{$first_row['coverage']}</td>"; echo "<td></td>"; echo "</tr>"; // 遍历剩余的记录 while( $row = $result->fetch_assoc() ){ $hours = floor($row['to_time'] / 3600); $minutes = floor(($row['to_time'] / 60) % 60); echo "<tr>"; echo "<td></td>"; echo "<td>{$row['rdate']}</td>"; echo "<td>{$row['s_time']}</td>"; echo "<td>{$row['e_time']}</td>"; echo "<td>$hours h : $minutes m </td>"; echo "<td>{$row['coverage']}</td>"; echo "<td></td>"; echo "</tr>"; } }
方式2:用标志变量控制只打印一次标题
else if( $num_results > 0) { $is_header_printed = false; // 标志位:记录标题是否已打印 while( $row = $result->fetch_assoc() ){ extract($row); // 仅在第一次循环时打印标题 if(!$is_header_printed){ $hourstot = floor($tot_hr / 3600); $minutestot = floatval(($tot_hr / 60) % 60); echo "<h4 class='text-muted font-15 m-b-15'> <b>* Hours Assigned : $hourstot : $minutestot </b></h4>"; echo "<h4 class='text-muted font-15 m-b-15'> <b>----------------------------------------------------------------------------------------------------- </b></h4>"; $is_header_printed = true; } // 输出当前记录的行数据 echo "<tr>"; $hours = floor($to_time / 3600); $minutes = floor(($to_time / 60) % 60); echo "<td></td>"; echo "<td>{$rdate}</td>"; echo "<td>{$s_time}</td>"; echo "<td>{$e_time}</td>"; echo "<td>$hours h : $minutes m </td>"; echo "<td>{$coverage}</td>"; echo "<td></td>"; echo "</tr>"; } }
额外注意
原代码中循环开头的echo "</tr>";属于多余代码,会导致HTML结构错误,修复时已移除。
内容的提问来源于stack exchange,提问作者Gutsy Creatives
相关产品推荐
相关产品推荐

