You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:25:17