2012-05-24 4 views
1

다음은 현재 사용중인 코드의 단순화 된 버전입니다. 이것은 무엇을PHP로 파일 번호별로 이미지 정렬

$files = glob('*.{jpg,png,gif}', GLOB_BRACE); 
$counter = 1; 
echo '<div id="images">'; 
foreach($files as $file) { 
    if ($counter % $IMGS_PER_ROW == 1) 
     echo '<div>'; 
    echo '<img src="' . $file . '"/>'; 
    if ($counter % $IMGS_PER_ROW == 0) 
    echo '</div>'; 
    $counter++; 
} 
echo '</div>'; 

는 디렉토리를 통해 검색하고, 그것을 발견하는 각 이미지에 대해, 그것은 줄에 $IMGS_PER_ROW 이미지의 최대 화면 인라인으로 인쇄합니다.

이 문제는, 그것이 우리가 이미지의 수에 각각 자신의 타이틀, 15 개 이미지를 갖고 있다고 할 수 있습니다 (즉 0.jpg, 1.jpg ... 14.jpg), 그들은 자신의 이름에 따라 순서대로 인쇄됩니다 문자열로. (즉, 0.jpg, 1.jpg, 10.jpg, 11.jpg, 12.jpg, 13.jpg, 14.jpg, 2.jpg, ...).

분명히, 나는 그들을 숫자 순서로 원한다. 그래서 정렬 알고리즘은 필연적이다 (나는 생각한다). PHP에서 너무 강하지 않아서 문자열 비교가 아닌 파일 순서의 배열을 숫자 순서로 정렬하는 간단한 O (n^2) 방법이 있는지 궁금합니다.

도움 주셔서 감사합니다.

+0

정렬의 어떤 O (n)이 방법은 없습니다 , 정렬은 적어도 O (n * log (n))입니다. 또한, afaik'glob'는 파일 시스템에 저장된 순서대로 파일을 정렬하지 않습니다. – knittl

+0

나는 O (n^2)를 의미하고, 똑바로 생각하지 않았습니다. – azz

답변

6

간단히 반복하기 전에 natcasesort 또는 natsort를 사용

$files = glob('*.{jpg,png,gif}', GLOB_BRACE); 
natcasesort($files); 
foreach($files as $file) { /* ... */ } 
+0

글쎄, 그게 예상보다 쉽지, 고마워. 그것이 '자연 질서'라고 불리는 것을 알지 못했지만 그것은 의미가 있습니다 ... – azz

+1

동일한 주제에 대한 훌륭한 글 - http://www.codinghorror.com/blog/2007/12/sorting-for-humans- natural-sort-order.html – verisimilitude

0

단순히 배열을 수치 적으로 분류 글 로빙 후 :

$files = glob(…); 
sort($files, SORT_NUMERIC); 
foreach(…) { 
    …; 
}