2011-09-01 8 views
10

Deseo recibir una matriz como entrada, filtrar los valores de la misma y salir como otra matriz. La función debe recorrer hasta x iteraciones.¿Realiza bucles PHP hasta el final de la matriz O alcanza cierto número de iteraciones?

Por ejemplo, si quería salida todos los valores de la entrada, me gustaría utilizar:

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

Pero si $array tenían un índice grande, el $formatted_array sería más grande de lo que necesito. Intenté usar un bucle for con múltiples condiciones, pero parece quedarse atascado en un bucle infinito.

No soy un desarrollador de oficio, por lo que la lógica es difícil de comprender. No recibo errores, por lo que es difícil entender dónde exactamente me estoy equivocando.

¿Cómo puedo realizar bucles PHP hasta el final de la matriz o hasta que la función alcance cierto número de iteraciones?

+0

No sería array_filter solucionar este problema bastante bien? http://php.net/manual/en/function.array-filter.php –

Respuesta

10

Está en el camino correcto: puede salir del bucle foreach cuando llegue a su conteo. Utiliza un foreach para iterar en toda la matriz y si nunca alcanza su recuento máximo establecido, procesará toda la matriz. Pero si alcanzas el máximo, salta del círculo.

$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

Me gusta esto, encaja bien con mi código existente. ¿Por qué elegirías esto sobre la solución de lazo 'while' de Meager? –

+1

@Joe Si lo hago desde cero, probablemente usaría un ciclo while, pero esto es solo una pequeña adaptación del código que ya ha escrito. –

15

utilizar un bucle 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

¿Está familiarizado con un comunicado break?

Bucle foreach de usuario y también mantener una variable de contador cada vez que ingrese el código dentro de la condición. Si alcanza los elementos numéricos requeridos, es decir, el contador alcanza un cierto valor, salga del 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; 
?> 
Cuestiones relacionadas