2011-09-01 29 views
10

我希望接收一個數組作爲輸入,從中過濾數值,並作爲另一個數組輸出。該函數應循環迭代至多x執行PHP循環直到數組OR結束或達到一定數量的迭代?

例如,如果我想輸出所有從輸入的值,我會用:

<?php 
$i=0; 
foreach ($array as $data) { 
    if ($data['type'] != 'some_value') { 
     $formatted_array[$i] = $data; 
     $i++; 
    } 
} 
return $formatted_array;  

但如果$array有一個大的指數,$formatted_array會比我更需要大。我嘗試使用具有多個條件的for循環,但似乎陷入了無限循環。

我不是貿易的開發者,所以邏輯很難理解。我沒有得到錯誤,所以很難理解我到底出錯的地方。

如何執行PHP循環,直到數組結束或函數達到一定數量的迭代爲止?

+0

豈不array_filter解決這個問題相當不錯? http://php.net/manual/en/function.array-filter.php –

回答

10

您正處在正確的軌道上 - 當您達到您的計數時,您可以退出foreach循環。您使用foreach來遍歷整個數組,如果您從未達到您所說明的最大數量,您將處理整個數組。但如果你達到最大值,跳出循環。

$i = 0; 
// Don't allow more than 5 if the array is bigger than 5 
$maxiterations = 5; 
foreach ($array as $data) { 
    if ($i < $maxiterations) { 
    if ($data['type'] != 'some_value') { 
     $formatted_array[$i] = $data; 
     $i++; 
    } 
    } 
    else { // Jump out of the loop if we hit the maximum 
    break; 
    } 
} 
return $formatted_array; 
+0

我喜歡這個,它適合我現有的代碼。爲什麼你會選擇微軟的'while'循環解決方案? –

+1

@Joe如果從頭開始,我可能會使用while循環,但這只是您已經編寫的代碼的微小改編。 –

15

使用while循環:

$i = 0; 
$limit = 10; 
$count = count($array); 

while ($i < $limit && $i < $count) { 
    $data = $array[$i]; 
    // your code here 
    ++$i; 
} 
0
$max_iterations = 100; 

for ($i=1;$i <=$max_iterations;$i++) 
{ 
    if ($i <= count($array)) 
     //do what u need 
    else 
     break;  
} 
0

你熟悉break聲明?

用戶foreach循環,並且每當你輸入條件內的代碼時也保持一個計數器變量。如果你達到了所需的數字元素,那就是計數器達到一定的值,跳出循環。

<?php 
$i=0; 
foreach ($array as $data) { 
    if ($data['type'] != 'some_value') { 
     $formatted_array[$i] = $data; 
     $i++; 
     if($i>$maxAllowedElements) // here $i can serve as the counter and you can define //$maxAllowedElements to whatever value you like. 
     break; 
    } 
} 
return $formatted_array; 
0
<?php 
    $counter = 0; 
    $new_array = array(); 
    while(count($new_array) <= $max_elements) { 
    if($array[$counter]['type'] !== 'some_value') { 
     $new_array[] = $array[$counter]; 
    } 
    } 
    return $new_array; 
?> 
相關問題