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

PHP代码优化:如何利用数组与foreach循环减少公寓租金统计代码中的变量数量

优化你的房型统计代码:减少变量+提升可读性

嘿,我来帮你把这段代码优化得更简洁好维护!你提到的用数组和foreach循环确实是解决这类重复代码问题的绝佳方案,咱们一步步来改:


核心优化思路

原代码的问题在于重复变量太多、分支判断冗余、平均计算代码重复。我们可以用一个结构化数组来统一管理所有房型的统计数据,再通过映射关系替代冗长的if-else,最后用循环批量计算平均值。


优化后的完整代码

// 初始化结构化统计数组:每个房型包含数量、总最低租金、总最高租金
$roomStats = [
    'one' => ['count' => 0, 'total_min' => 0, 'total_max' => 0],
    'two' => ['count' => 0, 'total_min' => 0, 'total_max' => 0],
    'three' => ['count' => 0, 'total_min' => 0, 'total_max' => 0],
    'four' => ['count' => 0, 'total_min' => 0, 'total_max' => 0],
    'studio' => ['count' => 0, 'total_min' => 0, 'total_max' => 0],
];

// 定义房型值到数组键的映射:把不同的输入值统一对应到统计数组的键
$bedroomMap = [
    1 => 'one',
    2 => 'two',
    3 => 'three',
    4 => 'four',
    '4+' => 'four',
    'Studio' => 'studio',
];

foreach ($nodes as $node) {
    $field_bedrooms = "input field value"; // 这里替换成你的实际取值逻辑
    $field_rentmin = "input field value"; // 实际最低租金值
    $field_rentmax = "input field value"; // 实际最高租金值

    foreach ($field_bedrooms as $field_bedroom) {
        if (!is_null($field_bedroom) && !empty($field_bedroom)) {
            $bedrooms_nid = $field_bedroom['target_id'];
            $bedrooms_vocab = $this->load($bedrooms_nid);
            $bedroom_value = $bedrooms_vocab->getName();

            // 通过映射找到对应的统计项,避免大量if-else
            if (isset($bedroomMap[$bedroom_value])) {
                $key = $bedroomMap[$bedroom_value];
                $roomStats[$key]['count']++;
                $roomStats[$key]['total_min'] += $field_rentmin;
                $roomStats[$key]['total_max'] += $field_rentmax;
            }
        }
    }
}

// 批量计算平均租金,不用每个房型单独写判断
$avg_minrent = [];
$avg_maxrent = [];
foreach ($roomStats as $key => $stats) {
    $avg_minrent[$key] = $stats['count'] > 0 ? $stats['total_min'] / $stats['count'] : '';
    $avg_maxrent[$key] = $stats['count'] > 0 ? $stats['total_max'] / $stats['count'] : '';
}

return [$avg_minrent, $avg_maxrent];

关键优化点解析

  1. 结构化统计数组
    把原本分散的room_one、rentmin_one等变量,整合到一个$roomStats数组里,每个房型对应一个子数组,直观又好管理。如果以后要加新的房型(比如5室),只需要在数组里加一行就行。

  2. 房型映射表
    用$bedroomMap把不同的房型输入值(比如4和4+)统一映射到统计数组的键,直接替代了原代码里冗长的if-else分支,逻辑更清晰。

  3. 统一更新逻辑
    找到对应的房型键后,直接更新该房型的数量和租金总和,不用重复写相同的累加代码。

  4. 批量计算平均值
    用foreach遍历统计数组,一次性计算所有房型的平均租金,避免了原代码里重复的判断和计算逻辑,减少出错概率。


内容的提问来源于stack exchange,提问作者noob coder

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 20:17:48