2011-09-01 13 views
10

Chciałbym otrzymać jedną tablicę jako dane wejściowe, odfiltrować z niej wartości i wypisać ją jako inną tablicę. Ta funkcja powinna wykonywać pętle aż do iteracji x.Wykonuj pętle PHP do końca tablicy LUB osiągnie określoną liczbę iteracji?

Na przykład, jeśli chciałem wyjścia wszystkie wartości z wejścia, chciałbym używać:

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

Ale jeśli $array miał duży wskaźnika, $formatted_array byłby większy niż muszę. Próbowałem używać pętli for z wieloma warunkami, ale wydaje się, że utknąłem w nieskończonej pętli.

Nie jestem programistą z branży, więc logika jest trudna do zrozumienia. Nie dostaję błędów, więc ciężko jest mi zrozumieć, dokąd dokładnie idę źle.

Jak mogę wykonywać pętle PHP do końca tablicy lub do momentu, gdy funkcja osiągnie określoną liczbę iteracji?

+0

Would not array_filter naprawić to całkiem ładny? http://php.net/manual/en/function.array-filter.php –

Odpowiedz

10

Jesteś na dobrej drodze - po osiągnięciu liczby możesz opuścić pętlę foreach. Używasz foreach do iteracji po całej tablicy, a jeśli nigdy nie osiągniesz podanej maksymalnej liczby, przetworzysz całą tablicę. Ale jeśli osiągniesz maksimum, wyskocz z pętli.

$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

Podoba mi się to, pasuje do mojego istniejącego kodu. Dlaczego wybrałbyś to na skromne rozwiązanie 'while'? –

+1

@Joe Jeśli robię to od podstaw, prawdopodobnie użyłbym pętli while, ale to tylko mała modyfikacja kodu, który już napisałeś. –

15

Użyj while pętlę:

$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

Czy jesteś zaznajomiony z break stwierdzeniem?

Pętla foreach użytkownika, a także utrzymuje zmienną licznika za każdym razem, gdy wpisujesz kod w warunek. Jeśli osiągniesz wymagane elementy liczbowe, to znaczy, że licznik osiągnie określoną wartość, wyrwij się z pętli.

<?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; 
?>