在foreach循环中调用方法和嵌套循环是否明智?

时间:2010-09-20 10:01:34

标签: php methods foreach nested-loops

您好我有一个返回支持票证数组的方法。每个支持服务单都可以包含许多注释,因此我有一个方法可以返回带有该票证ID的票证数组。我想在票证旁边显示票据,这意味着将获取票据嵌套在foreach循环中。

foreach($tickets as $ticket){
     //display ticket info

     //now get ticket notes using method getNotes()

     foreach($ticketnote as $note){
         //display note
     }
}   

这样的嵌套循环是否会影响性能?这是好习惯吗?

6 个答案:

答案 0 :(得分:3)

这不是问题。

  

这样的嵌套循环是否会影响性能?这是好习惯吗?

嵌套循环没有特定的性能影响。

但当然,可能会处理很多数据;根据它的数量,你可以达到内存或性能限制。但这是给定的,如果你使用不同的控制结构而不是嵌套循环也会发生。

基于array- / foreach()的解决方案总是需要在开始处理之前将完整数据集加载到内存中。

如果要从数据库中获取数据,可以考虑重新构造函数,以便逐个获取和处理数据库记录,而不是将它们全部加载到数组中,并foreach对它们进行操作。这允许您处理大于脚本内存限制的数据集。

答案 1 :(得分:1)

嗯,该程序会按照您的要求执行操作。它将通过所有门票的每张纸条。如果必须这样做 - 必须这样做。到目前为止,如果必须遍历所有这些实践,则不存在更好的实践。唯一的性能影响是迭代次数比没有嵌套循环时更多,但没有嵌套循环就没有结果。

答案 2 :(得分:1)

如果您拥有过多的票证和票据,则只会影响性能。所以,如果你有1000张票,每张票都有1000张票,那么内圈就会运行c。 1,000,000次。但是,正如其他人所说,如果有必要这样做,那么这是必要的。

答案 3 :(得分:1)

其他人已经指出了正确的方向。

然而,另一种尚待提及且值得(可能?)研究的方法是Spl Iterators

$iter = new RecursiveIteratorIterator(new RecursiveArrayIterator($array));

foreach($iter as $key=>$value) {
    echo $key.' =>'.$value;
}

答案 4 :(得分:0)

在第一次观察时,由于您无论如何都会显示“票据说明”,无论您是在单个循环还是两个嵌套循环中执行此操作都无关紧要。净迭代次数相同。

在演示问题上,一次显示所有这些信息并不明智。你肯定想要应用某种分页。

答案 5 :(得分:-1)

绝对不是一个好习惯,但我从来没有找到比这更好的解决方案。