2011-09-01 8 views
10

Desidero ricevere un array come input, filtrarne i valori e emetterlo come un altro array. La funzione dovrebbe scorrere fino a x iterazioni.Eseguire cicli PHP fino alla fine dell'array O raggiunge un certo numero di iterazioni?

Ad esempio, se volessi uscita tutti i valori inviati, mi userebbero:

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

Ma se $array avevano un indice di grandi dimensioni, il $formatted_array sarebbe più grande di quanto serve. Ho provato a utilizzare un ciclo for con condizioni multiple, ma sembra rimanere bloccato in un ciclo infinito.

Non sono uno sviluppatore di mestiere, quindi la logica è difficile da comprendere. Non ricevo errori, quindi è difficile capire dove sto andando esattamente storto.

Come posso eseguire loop PHP fino alla fine della matrice o fino a quando la funzione raggiunge un certo numero di iterazioni?

+0

Non sarebbe array_filter risolvere questo problema molto carino? http://php.net/manual/en/function.array-filter.php –

risposta

10

Sei sulla buona strada: puoi uscire dal ciclo foreach quando raggiungi il conteggio. Si utilizza un foreach per iterare sull'array completo e se non si raggiunge il conteggio massimo dichiarato, si elaborerà l'intero array. Ma se raggiungi il massimo, salta fuori dal giro.

$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

Mi piace, si adatta bene al mio codice esistente. Perché dovresti scegliere questa soluzione con la soluzione "while' loop" di magro? –

+1

@Joe Se lo fai da zero, probabilmente userò un ciclo while, ma questo è solo un piccolo adattamento del codice che hai già scritto. –

15

Utilizzare un while ciclo:

$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

Sei familiarità con una dichiarazione break?

L'utente foreach loop e mantiene anche una variabile contatore ogni volta che si inserisce il codice all'interno della condizione. Se raggiungi gli elementi numerici richiesti, cioè il contatore raggiunge un determinato valore, interrompi il ciclo.

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