D3DN_BLOG

  • 首页
  • About
求知若渴,虚心若愚
没有天生的高手,更没有永远的菜鸟
  1. 首页
  2. 未分类
  3. 正文

双重 foreach 循环嵌套优化方案

2025年8月15日 103点热度

在 PHP 中,双重 foreach 循环嵌套虽然在某些场景下是必要的,但其性能和可读性可能会受到影响,尤其是在处理大型数据集时。以下是一些优化双重 foreach 循环嵌套的常用方法:

使用 array_column 和 array_map 简化操作

如果目标是将二维数组按列重组,可以使用 array_column 和 array_map 来避免显式的双重循环。例如:

foreach ($carModelInfo as $key => $val) {
    $keys = array_keys($val); // 缓存键值
    foreach ($keys as $k) {
        $carModelArr[$k][] = $val[$k];
    }
}

此方法通过 array_values 获取数组的值,并使用 array_map 将其按列组合,从而避免了显式的嵌套循环。

避免重复计算

在嵌套循环中,确保外部循环和内部循环的条件尽可能高效。例如,将外部循环的结果缓存到变量中,以避免在每次内部循环中重复计算:

foreach ($carModelInfo as $key => $val) {
$keys = array_keys($val); // 缓存键值
foreach ($keys as $k) {
$carModelArr[$k][] = $val[$k];
}
}

通过将 array_keys($val) 提取为变量 $keys,可以避免在每次内部循环中重新计算键值。

使用 for 循环替代 foreach(适用于索引数组)

如果数据结构是索引数组(即连续的整数键),使用 for 循环可能比 foreach 更高效,因为 foreach 在每次迭代时会复制数组,而 for 直接访问索引:

$count = count($carModelInfo);
for ($i = 0; $i < $count; $i++) {
$val = $carModelInfo[$i];
$keys = array_keys($val);
$keyCount = count($keys);
for ($j = 0; $j < $keyCount; $j++) {
$k = $keys[$j];
$carModelArr[$k][] = $val[$k];
}
}

这种方法减少了 foreach 的复制开销,适用于较大的数组。

使用引用传递减少内存开销

在 foreach 中,如果需要修改原始数组,可以使用引用传递来减少内存开销:

foreach ($carModelInfo as &$val) {
foreach ($val as $k => $v) {
$carModelArr[$k][] = $v;
}
}
unset($val); // 避免后续使用引用时的副作用

通过在外部循环中使用 &$val,可以直接访问原始数组元素,从而减少内存复制。

使用 array_reduce 进行聚合操作

如果目标是将数据聚合为特定结构,可以使用 array_reduce 来简化逻辑:

$carModelArr = array_reduce(array_keys(reset($carModelInfo)), function ($carry, $key) use ($carModelInfo) {
$carry[$key] = array_column($carModelInfo, $key);
return $carry;
}, []);

此方法通过 array_column 和 array_reduce 将数据按列提取,避免了显式的双重循环。

本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可
标签: 暂无
最后更新:2025年8月15日

Moment

角度永远刁钻,关注点极其独特

点赞
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

Moment

角度永远刁钻,关注点极其独特

最新 热点 随机
最新 热点 随机
PHP中接口返回压缩后的响应(如 GZIP 压缩)的方法 双重 foreach 循环嵌套优化方案 王者人机自动助手 XX抹机下载 微霸改机工具 XP框架
双重 foreach 循环嵌套优化方案PHP中接口返回压缩后的响应(如 GZIP 压缩)的方法王者人机自动助手XX抹机下载
王者人机自动助手 浅谈项目交接中相关细则、顺序 Docker真的很好用,PHP开发者都应该学起来 nginx负载均衡的三种方式 微霸改机工具 PHP中接口返回压缩后的响应(如 GZIP 压缩)的方法
标签聚合
王者荣耀 Nginx 抹机工具 架构 PHP 项目衔接 MYSQL 微服务
分类
  • DB优化
  • 未分类
  • 玩机空间
  • 编程技术
  • 脚本工具

COPYRIGHT © 2018-2025 d3dn.com. ALL RIGHTS RESERVED.转载请注明出处

Theme Kratos Made By Seaton Jiang

赣ICP备16000603号-2

赣公网安备36082902000188