2010-07-19 62 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但這會讓你的代碼難讀並且難以維護 - 我會推薦而不是這樣做...