PHP代码优化:提升循环效率
// 使用更语义化的变量名
$timeFields = [
'start_time' => 1,
'return_time' => 2,
];
// 循环数据
foreach ($data as $datum) {
foreach ($timeFields as $field => $type) {
if (!empty($datum->$field)) {
foreach ($datum->$field as $time) {
$resultData[] = [
'id' => $datum->id,
's_day' => $datum->s_day,
'type' => $type,
'time' => $time,
'line' => $datum['lines'],
'start_point' => $datum['lines']['point'][0]['point'],
'end_point' => $datum['lines']['point'][count($datum['lines']['point']) - 1]['point'],
'num' => 0,
];
}
}
}
}
// 循环匹配数据和结果进行关联
foreach ($resultData as &$result) {
foreach ($subscribeNum as $subscribe) {
if ($subscribe->line_id == $result['line']['id'] && $subscribe->line_start_time == $result['time']) {
$result['num'] = $subscribe->num;
break;
}
}
}
// 根据调用方及条件过滤不符合条件的数据
$lineIds = [];
foreach ($resultData as $item) {
if ($api) {
if ($busSet > $item['num'] && !in_array($item['line']['id'], $lineIds)) {
$lineIds[] = $item['line']['id'];
$result[$item['line']['id']] = $item;
}
} else {
$result[] = $item;
}
}
// 查询预约数据
$subscribe = $subscribeService->model
->where([
['status', '=', config('status.enable')],
['line_id', 'in', $lineIds]
])
->whereDay('s_day', $param['date'])
->field('line_id,line_start_time,point_id,count(0) as num')
->group('line_id,line_start_time,point_id')
->select()
->toArray();
// 处理结果数据
foreach ($result as &$resultDatum) {
$date = strtotime(date('Y-m-d ') . $resultDatum['time'] . ':00');
$pointArray = $resultDatum['line']['point'];
foreach ($pointArray as &$point) {
$num = 0;
$point['num'] = $num;
$date = strtotime('+{$point['time']} minute', $date);
$point['time'] = date('H:i', $date);
foreach ($subscribe as $s) {
if ($resultDatum['line']['id'] == $s['line_id'] && $resultDatum['time'] == $s['line_start_time'] && $s['point_id'] == $point['id']) {
$point['num'] = $s['num'];
break;
}
}
}
$resultDatum['line']['point'] = $pointArray;
}
优化说明:
- 变量名优化: 使用更具描述性的变量名,如将
$fields改为$timeFields,$d改为$datum,提高代码可读性。 - 减少嵌套循环: 尽量减少循环嵌套层级,例如在处理
$subscribeNum时,可以使用哈希表或其他数据结构来优化查询效率。 - 代码结构: 添加注释,解释代码逻辑,使代码更易于理解和维护。
其他建议:
- 可以考虑使用 PHP 的数组函数,例如
array_map,array_filter等,简化代码逻辑,提高代码效率。 - 如果数据量较大,可以考虑使用数据库索引、缓存等机制,进一步提升性能。
希望以上信息对您有所帮助!
原文地址: https://www.cveoy.top/t/topic/fWTO 著作权归作者所有。请勿转载和采集!