PHP代码优化:提高嵌套循环效率
PHP代码优化:提高嵌套循环效率
在PHP开发中,我们经常会遇到处理数组或对象集合的情况,这时候就需要用到循环语句。然而,当循环嵌套层级过多时,代码的执行效率会明显下降。本文将通过一个实际案例,介绍如何优化PHP嵌套循环代码,以提高代码效率和性能。
**原始代码:**phpforeach ($data as $datum) { foreach ($field as $index => $f) { if (empty($datum->$index)) { continue; } foreach ($datum->$index as $item) { $temp = (object) [ 'id' => $datum->id, 's_day' => $datum->s_day, 'type' => $f, 'time' => $item, 'line' => $datum['lines'], 'start_point' => $datum['lines']['point'][0]['point'], 'end_point' => $datum['lines']['point'][count($datum['lines']['point'])-1]['point'], 'num' => 0, ]; foreach ($subscribeNum as $s) { if ($s->line_id == $datum['line'] && $s->line_start_time == $temp->time) { $temp->num = $s->num; break; } } $result[] = $temp; if ($api && $busSet > $temp->num && $index == 's_time') { break 2; } } }}
优化思路:
- 减少循环次数: 尽量减少嵌套循环的层数,可以将部分逻辑提前处理或使用更高效的数据结构。2. 使用更高效的数据结构: 例如,使用键值对数组替代循环查找,可以大幅提高效率。3. 提前判断条件: 将循环内部的条件判断提前到循环外部,避免不必要的循环。
**优化后的代码:**php// 假设 $subscribeNum 可以转换为以 'line_id' 和 'line_start_time' 为键的数组$subscribeNumMap = [];foreach ($subscribeNum as $s) { $subscribeNumMap[$s->line_id][$s->line_start_time] = $s->num;}
foreach ($data as $datum) { foreach ($field as $index => $f) { if (empty($datum->$index)) { continue; } foreach ($datum->$index as $item) { $temp = (object) [ 'id' => $datum->id, 's_day' => $datum->s_day, 'type' => $f, 'time' => $item, 'line' => $datum['lines'], 'start_point' => $datum['lines']['point'][0]['point'], 'end_point' => $datum['lines']['point'][count($datum['lines']['point'])-1]['point'], 'num' => $subscribeNumMap[$datum['line']][$item] ?? 0, // 使用键值对数组获取订阅数量 ]; $result[] = $temp; if ($api && $busSet > $temp->num && $index == 's_time') { break 2; } }
原文地址: https://www.cveoy.top/t/topic/fWzG 著作权归作者所有。请勿转载和采集!