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];
关键优化点解析
结构化统计数组
把原本分散的room_one、rentmin_one等变量,整合到一个$roomStats数组里,每个房型对应一个子数组,直观又好管理。如果以后要加新的房型(比如5室),只需要在数组里加一行就行。房型映射表
用$bedroomMap把不同的房型输入值(比如4和4+)统一映射到统计数组的键,直接替代了原代码里冗长的if-else分支,逻辑更清晰。统一更新逻辑
找到对应的房型键后,直接更新该房型的数量和租金总和,不用重复写相同的累加代码。批量计算平均值
用foreach遍历统计数组,一次性计算所有房型的平均租金,避免了原代码里重复的判断和计算逻辑,减少出错概率。
内容的提问来源于stack exchange,提问作者noob coder
相关产品推荐
相关产品推荐

