2010-07-19 128 views
0

我正在处理自定义分页系统,并遇到以下问题。当其中一个元素被滤除时,最终数组的大小比需要的小。因此,我正在寻找一种解决方案来增加循环内的迭代次数,以便始终获得由50个元素组成的数组。如何在php中增加循环内的迭代次数?

$limit = 50; //Number of elements I want to fetch 

for($x=0; $x<$limit; $x++){ 

    if ($elementIsNotFiltered) { 
     //add element to $someArray; 
    } 
    else { 
     //increase the number of iterations, so even if some elements are filtered out, 
     //the size of $someArray will always be 50 
    } 

} 

感谢您的任何帮助。

回答

7

做一个while()循环,而是和break当你终于打你$limit

+3

是的;这个,for循环用于知道数字的时候,while循环用于你不知道数字的时候,但是当你到达那里时知道 – 2010-07-19 20:39:56

+1

但是,为什么你一个无限的while循环,然后突破而不是指定使用while的条件? – NikiC 2010-07-19 20:53:41

+1

您可以在循环内轻松设置条件而不是使用break $ x = true; while($ x){if(){ $ x = false;}} – 2010-07-19 21:08:44

2
else { 
    ++$limit; 
} 

试过了吗?

你也可以做同样的事情倒过来:

else { 
    --$x; 
} 

或者是多一点点有效:

$x = 0; 
while ($x != 50) { 
    if ($notFiltered) { 
     ++$x; 
    } 
} 

如果你想保存计数器变量也一样,你可以使用:

while (!isset($array[49])) { 
} 

!isset($array[49])这里只是的代名词0。

+0

是的,但它似乎不是t工作。 – ababa 2010-07-19 20:39:39

+0

@ecu - 那么'$ x - '怎么样? – 2010-07-19 20:44:33

+0

@nikic,不会工作的原因是因为在循环完成后else子句会触发 - 在此时更改$ limit是太迟了。 – 2010-07-19 20:45:10

2

使用while循环。

while(count($somearray) < 50 && /*elements remain*/) ...

0

这听起来像你对我正在寻找一个while循环 - 没有for循环:

while ($items < 50 && [more items to filter]) { 
    if ([add to array]) { 
     $items++; 
    } 
} 

如果你真的想这样做,在你的for循环中,您可以随时修改$x但这会让你的代码难读并且难以维护 - 我会推荐而不是这样做...