2011-07-14 16 views
6

Si tengo un constructo foreach, como éste:¿Cómo puedo averiguar cuántas veces una construcción foreach realiza un bucle en PHP, sin usar una variable "contador"?

foreach ($items as $item) { 
    echo $item . "<br />"; 
} 

sé que puedo llevar la cuenta de cuántas veces los bucles de constructo mediante el uso de una variable de contador, así:

$counter = 0; 

$foreach ($items as $item) { 
    echo $item.' is item #'.$counter. "<br />"; 
    $counter++; 
} 

Pero ¿Es posible hacer lo anterior sin usando una variable "contador"? Es decir, ¿es posible conocer el recuento de iteraciones dentro del bucle foreach, sin que necesita una variable "contador"?

Nota: Estoy totalmente de acuerdo con el uso de contadores en mis bucles, pero solo tengo curiosidad por ver si hay una disposición para esto integrada directamente en PHP ... Es como la increíble construcción foreach que simplificó ciertas operaciones que son más tristes cuando se hace lo mismo usando una construcción for.

+1

lo que está mal con el uso de una ¿mostrador? –

+0

Puede usar sizeof ($ items) ... –

+0

does php tiene $ items.IndexOf ($ item)? – bleepzter

Respuesta

4

No, no es posible a menos que su $items sea una matriz que tenga contiguos índices (claves) comenzando con la tecla 0.

Si tiene contiguos índices hacer:

foreach ($items as $k => $v) 
{ 
    echo $k, ' = ', $v, '<br />', PHP_EOL; 
} 

Pero, como otros han dicho, no hay nada malo usando una variable de contador.

+0

Gracias. ¿Podría explicar un poco sobre PHP_EOL? Lo busqué en PHP.neta, pero en realidad no se dio más detalles sobre la constante. – Titus

+1

@Titus Vea mi respuesta en [¿Cuándo uso la constante de PHP "PHP_EOL"?] (Http://stackoverflow.com/questions/128560/when-do-i-use-the-php-constant-php- eol/6666554 # 6666554). – AlexV

+0

Eres increíble ... ¡gracias! – Titus

1

Se podría decir cuántas veces se hará en bucle o debería haber bucle haciendo una

$loops = count($items); 

Sin embargo, eso sólo funcionará si el código no se salta una iteración de ninguna manera.

5

No hay una manera más fácil: para eso están las variables de recuento.

Supongo que quiere saber el recuento actual durante el ciclo. Si solo necesita saberlo después, use count($items) como otros han sugerido.

1

foreach loops N veces, donde N es solo el tamaño de la matriz. Entonces puede usar count($items) para saberlo.

EDITAR Por supuesto, como notado por granel, el bucle no debe romper (o tal vez continuar, pero me gustaría contar con un continue como un bucle, aunque más corto ...)

Cuestiones relacionadas