PHP中如何计算数组数据的平均入住率百分比?
计算PHP中房间占用率的平均值
首先,先理清楚你的需求:你有总房间数$rooms = 6,以及一个记录每日占用房间数的数组,需要计算这些日期的平均占用率。你的尝试代码有两个明显的问题:变量名不匹配(用了$array但实际数组是另一个变量),而且PHP不支持直接对数组做算术运算。
下面是几种可行的解决方案,一步步帮你实现需求:
问题回顾
你的数据示例:
$rooms = 6; $occupiedRooms = [ '2018-05-11' => 5, '2018-05-12' => 5 ];
预期逻辑:每天占用率是(占用数/总房间数)*100,再求所有天数的平均值。
解决方案1:用array_map处理每日数据
这种方法先把每个日期的占用率计算出来,再求平均,逻辑清晰:
$rooms = 6; $occupiedRooms = [ '2018-05-11' => 5, '2018-05-12' => 5 ]; // 生成每日占用率数组 $dailyRates = array_map(function($occupied) use ($rooms) { return ($occupied / $rooms) * 100; }, $occupiedRooms); // 计算平均值并保留两位小数 $averageRate = round(array_sum($dailyRates) / count($dailyRates), 2); echo $averageRate; // 输出 83.33
解决方案2:直接遍历求和(更高效)
如果不想额外生成中间数组,可以直接遍历累加总占用率,再除以天数:
$rooms = 6; $occupiedRooms = [ '2018-05-11' => 5, '2018-05-12' => 5 ]; $totalRate = 0; $dayCount = count($occupiedRooms); foreach ($occupiedRooms as $occupied) { $totalRate += ($occupied / $rooms) * 100; } // 处理空数组的情况,避免除以0错误 $averageRate = $dayCount > 0 ? round($totalRate / $dayCount, 2) : 0; echo $averageRate; // 输出 83.33
解决方案3:用array_reduce简化累加
喜欢函数式风格的话,可以用array_reduce来完成累加:
$rooms = 6; $occupiedRooms = [ '2018-05-11' => 5, '2018-05-12' => 5 ]; $totalRate = array_reduce($occupiedRooms, function($sum, $occupied) use ($rooms) { return $sum + ($occupied / $rooms) * 100; }, 0); $dayCount = count($occupiedRooms); $averageRate = $dayCount > 0 ? round($totalRate / $dayCount, 2) : 0; echo $averageRate; // 输出 83.33
额外提示
一定要注意处理数组为空的情况!如果没有任何日期数据,count($occupiedRooms)会是0,直接除以0会触发PHP错误,所以加上$dayCount > 0的判断很有必要,你可以根据业务需求把空数据的平均值设为0或者其他默认值。
内容的提问来源于stack exchange,提问作者miami
相关产品推荐
相关产品推荐

