2009-07-28 3 views
0

2 년 동안 PHP를 사용하지 않고이 코드를 작성하여 사진 폴더를 반복하여 알파벳 순으로 페이지에 기록했습니다. 상당히 간단한 요청 이었지만 작성하는데 15 분이 걸렸습니다.폴더의 사진을 반복 재생할 때이 코드를 최적화 할 수 있습니까?

if ($handle = opendir('photos')) { 
    $count = 0; 
    $list[] = array(); 
    while (false !== ($file = readdir($handle))) { 
    if ($file != "." && $file != "..") { 
     $list[$count] = $file; 
     $count ++; 
    } 
    } 
    closedir($handle); 
    asort($list); 
    $sorted_list = array(); 
    $sorted_list = array_values($list); 
    foreach ($sorted_list as $i => $value) { 
    echo "<li><img src=\"photos/$sorted_list[$i]\" alt=\"$sorted_list[$i]\" title=\"\"></li>\n"; 
    } 
}

완전히 잘못된 방식으로 작성 했습니까? 코드를 개선 할 수있는 방법이 있습니까? 건설적인 피드백은 기꺼이 받아 들여졌습니다.

답변

2

:

sort($list); 
for ($i = 0; $i < count($list); $i++) { 
    echo "<li><img src=\"photos/{$list[$i]}\" alt=\"{$list[$i]}\" title=\"\"></li>\n"; 
} 
0

$count은 필요하지 않습니다. 당신은 scandir()을 활용할 수

$photos = glob('photos/*'); 
foreach($photos as $photo) { 
    echo "<li><img src=\"{$photo}" alt=\"{$photo}\" title=\"\"></li>\n"; 

} 

http://us.php.net/manual/en/function.glob.php

+2

$ list [] = array()를 $ list = array()로 변경하십시오. 또한 sort() 대신 natsort()를 사용하려고합니다. :-) –

1

이 시도 : 이것은 당신에게

$list[] = array(); 
while (false !== ($file = readdir($handle))) { 
    if ($file != "." && $file != "..") { 
     $list[] = $file; 
    } 
} 

정렬 단지로 표시 교체 같은 결과를 줄 것이다 함수는 디렉토리를 읽는 것을 처리 할 것이다. 결과 정렬.

$files = scandir('photos'); 
if ($files !== false) 
{ 
    foreach($files as $f) { 
     if ($f == '..' || $f == '.') continue;  
     echo '<li><img src="photos/'.$f.'" alt="'.$f.'" title=""></li>'."\n"; 
    } 
} 

가독성을 위해 약간 편집했습니다. 이 배열의 키가 숫자 순으로되어 있지 않다는 사실 중요하지 않기 때문에

+0

어쩌면 glob ('photos/*. jpg'); 확인차. – Skilldrick

+0

예, 그들이 jpg 인 것을 알고 있습니다. 확장 기능을 사용하는 것이 좋습니다. 그러나 그들은 이론적으로 여러 사진 형식 중 하나 일 수 있습니다. – davethegr8

0

당신은

foreach ($sorted_list as $i => $value) { 
    echo "<li><img src=\"photos/$sorted_list[$i]\" alt=\"$sorted_list[$i]\" title=\"\"></li>\n"; 
    } 

당신이) array_values를 (호출 할 필요는 없습니다 그리고

foreach ($sorted_list as $value) { 
    echo "<li><img src=\"photos/$value\" alt=\"$value\" title=\"\"></li>\n"; 
} 

로 대체 할 수있다 .

0

더 간단 방법은 scandir 기능을 사용하고 있습니다 :

$dir = 'photos'; 
$files = array_diff(scandir($dir), array(".", "..")); 
foreach ($files as $i => $value) { 
    echo "<li><img src=\"photos/$value\" alt=\"$value\" title=\"\"></li>\n"; 
} 

행운을!

관련 문제