【问题标题】:How to avoid loop inside loop如何避免循环内循环
【发布时间】:2015-05-08 20:05:50
【问题描述】:

我有这个代码:

foreach($categories as $category) {
  $items = getItems($category);

  foreach($items as $item) {
     // some code to manipulate $item
  }
}

如您所见,内循环依赖于外循环。问题是如果数据太大,这需要相当长的时间。有什么方法、算法或技术可以避免依赖外循环的内循环

PS。我使用的是 PHP 5.3,所以 yield 是不可能的。也有人告诉我,递归在这里可能会有所帮助,但我不知道该怎么做。

感谢您的帮助

【问题讨论】:

  • 根据您提供的内容,我看不出有任何算法可以避免这种情况。您可以调整您正在尝试做的事情的工作流程,这样您就不必一次操作每个类别的项目,而是一次只做一个类别
  • getItems 是否运行数据库查询?
  • 如果您可以将数组代码和您期望的内容作为输出,那么任何人都可以提出解决方案
  • 请添加getItems的代码
  • 总的来说,我的观点是如何避免循环内循环,不管我使用的是数据库还是getItems 做了什么。当我们必须编写这样的代码时通常会出现这种情况,但应该有一些更好的性能方法来避免内部循环。希望是有道理的。

标签: php algorithm logic


【解决方案1】:

避免嵌套循环的一种方法是先存储数据,然后再对其进行操作

$items=array_map("getItems",$categories);
$items=array_reduce("array_merge",$items);
array_walk($items,"item_manipulation");

请注意,此代码并不比您原来的 sn-p 更有效,它只是没有您要求的嵌套循环。

如果我们能够知道getItems 做了什么,以及您对每个项目进行了哪些操作,那么(也许)更智能的优化将是可能的

【讨论】:

  • 听起来不错,我会自己做基准测试。感谢有用的提示:)
猜你喜欢
  • 2011-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-01
  • 2021-12-03
  • 1970-01-01
相关资源
最近更新 更多