2011-09-01 89 views
5

这里的问题是,当我在创建数组$picnameoutput后执行print_r时,它会按照屏幕截图中的说明打印数组。我的循环只返回一个值

后来我运行for循环并回显它只是为了看到输出它只给了我1个值,我不知道为什么它会选择该值,它甚至不是数组中的第一个值。

非常沮丧。

这里是我的代码

<?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]"; 
    } 
?> 

这里是一个截图,所以你可以明白我的意思

enter image description here

+0

替换$ I <计数($ picnameoutput) $ i <= count($ picnameoutput)循环所有的值。由于您使用的语法,您正在获得adam8.jpg。 – Tom

+2

您不应该在循环中使用'count()',因为它会在每个循环中执行。您应该将'count()'的值添加到变量中,并在循环中检查该变量。 – PeeHaa

回答

29

for()支架之前之后有一个分号;。去掉它。

所以

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

成为

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

但我会建议使用foreach()代替

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

这是很容易使用和速度甚至比你的for循环

+0

谢谢你做的伎俩,但对下一期:) – GrooveChampion

+0

这很棒,现在我有另一个问题给你,为什么这会更好?当我使用“for”时,它将数组的前两个值作为不存在的返回,但是对于每个固定的数值使用! – GrooveChampion

+0

@GrooveChampion:因为有一些索引缺失(如1和2) – genesis

12

你有for后分号,所以你的代码是一样执行:

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

而且,它可以通过写短的

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

这是我第一次尝试,我花了很长时间才得到这么远......我很欣赏这个建议,尽管谢谢。 – GrooveChampion

+0

@GrooveChampion别担心,这是一个典型的甚至是教科书的错误。对于第一次尝试之一,你的代码看起来非常好。不要把我的一行太严重;)。 – phihag

+0

是的,我花了一点时间才知道正则表达式,并花了很多思考来解决这个问题,但我想强迫自己做这件事,因为我一直使用的书不会让你做任何事情。对我来说,很难在没有做任何事情的情况下接受这么多理论...... – GrooveChampion