2011-09-01 30 views
5

El problema aquí es que cuando imprimo_r después de crear la matriz con $picnameoutput imprime la matriz como verá en la captura de pantalla.Mi bucle solo devuelve un valor

Más tarde después de ejecutar el bucle for y repetirlo solo para ver el resultado, solo me da 1 valor y no puedo entender por qué elige ese valor, ni siquiera es el primero en la matriz.

Muy frustrado.

Aquí está mi código

<?php 
    $largedir = 'images/headshots/large'; 
    $large = scandir($largedir); 

    $picnameoutput = preg_grep("/adam.*/", $large); 
    print_r($picnameoutput); 

    for ($i=0; $i<count($picnameoutput); $i++); { 
    echo "$picnameoutput[$i]"; 
    } 
?> 

Y aquí es una captura de pantalla para que pueda ver lo que quiero decir

enter image description here

+0

sustituya $ i Tom

+2

Nunca debe usar 'count()' en un bucle ya que se ejecutará en cada bucle. Simplemente debe agregar el valor de 'count()' a una variable y verificar esa variable en su ciclo. – PeeHaa

Respuesta

29

Usted tiene un punto y coma después de ;for() antes de soporte. Eliminarlo

Así

for ($i=0; $i<count($picnameoutput); $i++); { 
echo "$picnameoutput[$i]"; 
} 

convierte

for ($i=0; $i<count($picnameoutput); $i++) { 
    echo "$picnameoutput[$i]"; 
} 

Sin embargo, recomendaría utilizar foreach() lugar

foreach ($picnameoutput as $pic) { 
    echo $pic; 
} 

que es bastante fácil de usar e incluso más rápido que el bucle for

+0

Gracias hizo el truco, pero en el próximo número :) – GrooveChampion

+0

Eso es increíble, ahora tengo otra pregunta para ti, ¿Por qué funciona mejor? Cuando estaba usando solo "para", estaba devolviendo los primeros 2 valores de la matriz como inexistentes pero usando para cada uno arreglado ese derecho. – GrooveChampion

+0

@GrooveChampion: porque faltan algunos índices (como 1 y 2) – genesis

12

Usted tiene un punto y coma después de la for, por lo que su código se ejecuta como:

for ($i=0; $i<count($picnameoutput); $i++) { 
    ; // Do nothing 
} 
{ 
    echo "$picnameoutput[$i]"; 
} 

Además, se podría escribir más corto como

echo implode('', glob('images/headshots/large/adam*')); 
+0

Este es uno de mis primeros intentos, me ha llevado mucho tiempo llegar hasta aquí ... Aunque agradezco el consejo, gracias. – GrooveChampion

+0

@GrooveChampion No se preocupe, es un error típico, incluso en los libros de texto. Para uno de los primeros intentos, su código se ve notablemente bueno. No tome mi one-liner demasiado en serio;). – phihag

+0

Sí, me tomó un poco conocer las expresiones regulares y pensé mucho para resolver esto, pero quería forzarme a hacerlo, ya que los libros que he estado usando no te obligan a hacer nada. Para mí es difícil asimilar tanta teoría sin hacer nada ... – GrooveChampion

Cuestiones relacionadas