2011-09-01 43 views
5

Vấn đề ở đây là khi tôi in print_r sau khi tạo mảng với $picnameoutput nó sẽ in mảng như bạn sẽ thấy trong ảnh chụp màn hình.Vòng lặp của tôi chỉ trả lại một giá trị

Sau khi tôi chạy vòng lặp và lặp lại nó chỉ để xem đầu ra nó chỉ cho tôi 1 giá trị và tôi không thể tìm ra lý do tại sao nó chọn giá trị đó, nó thậm chí không phải là giá trị đầu tiên trong mảng.

Rất thất vọng.

Đây là mã của tôi

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

Và đây là một ảnh chụp màn hình để bạn có thể thấy những gì tôi có nghĩa là

enter image description here

+0

Thay $ i Tom

+2

Bạn không bao giờ nên sử dụng 'count()' trong một vòng lặp vì nó sẽ được thực hiện trên mỗi vòng lặp. Bạn chỉ cần thêm giá trị 'count()' vào một biến và kiểm tra biến đó trong vòng lặp của bạn. – PeeHaa

Trả lời

29

Bạn có một dấu chấm phẩy ; sau for() trước khung. Gỡ bỏ nó.

Vì vậy

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

trở thành

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

tuy nhiên tôi sẽ khuyên bạn nên sử dụng foreach() thay

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

đó là khá dễ dàng để sử dụng và thậm chí nhanh hơn bạn cho vòng lặp

+0

Cảm ơn đã làm các trick, nhưng về vấn đề tiếp theo :) – GrooveChampion

+0

Đó là tuyệt vời, bây giờ tôi có một câu hỏi cho bạn, Tại sao điều đó làm việc tốt hơn? Khi tôi đã sử dụng chỉ "cho" nó đã trở về 2 giá trị đầu tiên của mảng là không tồn tại nhưng sử dụng cho mỗi cố định mà phải lên! – GrooveChampion

+0

@GrooveChampion: vì có một số chỉ mục bị thiếu (như 1 và 2) – genesis

12

Bạn có một dấu chấm phẩy sau for, do đó, mã của bạn được thực hiện như:

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

Ngoài ra, nó có thể được viết ngắn hơn như

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

Đây là một trong những nỗ lực đầu tiên của tôi, nó đã đưa tôi một thời gian dài để có được điều này đến nay ... Tôi đánh giá cao những lời khuyên mặc dù cảm ơn. – GrooveChampion

+0

@GrooveChampion Đừng lo lắng, đó là một điển hình, ngay cả sách giáo khoa sai lầm. Đối với một trong những lần thử đầu tiên, mã của bạn trông rất đẹp. Đừng lấy một lớp lót của tôi quá nghiêm trọng;). – phihag

+0

Phải mất một chút để tìm hiểu về các biểu thức chính quy và suy nghĩ rất nhiều để tìm ra điều này nhưng tôi muốn ép bản thân mình làm điều đó vì những cuốn sách tôi đã sử dụng không thực sự khiến bạn làm bất cứ điều gì .. Đối với tôi rất khó có thể đưa vào rất nhiều lý thuyết mà không làm bất cứ điều gì ... – GrooveChampion

Các vấn đề liên quan