2013-07-07 3 views
0

디렉토리 목록을 표시하고 있습니다. 파일을 파일 이름순으로 정렬하려고하지만 확장명으로 정렬하려고합니다. 표시하기 전에PHP - 원래 정렬 후 데이터 정렬

...
   -
    첫 번째 파일 이름을 기준으로 정렬 - 다음 종류의 확장에 의해 이런 종류의 내

예 :
a_first.jpg

a_first을 a_first.png. 우편 번호
b_second.doc
b_second.gif
에게 b_second.jpg는

<?php 
function getFileExt($filename) { 
    return substr(strrchr($filename,'.'),1); 
} 

$handle=opendir(dirname(__FILE__)); 

while (($file = readdir($handle))!==false) { 
    $fileExt = strtolower(getFileExt($file)); 
    if(in_array($file, $ignore_file_list)) { continue; } 
    if(in_array($fileExt, $ignore_ext_list)) { continue; } 
    if(is_dir($file)) { $fileExt = "dir"; } 

/* 
HERE: 

Before display... 
    - sort by filename first 
    - then sort by extension within this sort 

Example: 
    a_first.jpg 
    a_first.png 
    a_first.zip 
    b_second.doc 
    b_second.gif 
    b_second.jpg 
*/ 

    echo ' 
<div><a href='.$file.' class='.$fileExt.'>&nbsp;</a></div> 
<div><a href='.$file.'>$file</a></div> 
'; 
} 

closedir($handle); 
?> 

나는 FOREACH를 사용하여 WHILE 내에서 두 번째 종류 (= 파일 '확장) 할 또는 WHILE의 외부 FOREACH을해야하는 경우 잘 모르겠어요합니다 (을 넣어 배열에 처음으로 데이터) 또는이 다중 배열 정렬 상황 또는 ... ???

FYI : 데이터베이스 사용은 옵션이 아닙니다.

도움을 주시면 감사하겠습니다.

+0

분할에 이름과 파일 형식으로 파일을 당신의 글로브 호출을 변경하고 배열을 정렬 할 특정 확장자를 가진 항목에 대한 결과를 제한하고자한다면

$files = glob($directory."/*.*"); // for just the files names $files = array_map("basename", $files); natcasesort($files); 

그런 다음 함께 다시 가입하십시오. –

답변

0

natcasesort와 함께 glob을 사용할 수 있습니다. 당신은 당신이 배열에

$files = glob($directory."/*.{jpg,png,zip}", GLOB_BRACE); 
+0

굉장! 제 교육을 위해서 코드를 조금만 설명해 주시겠습니까? 예를 들면 ... "$ directory"변수가 내 코드에 없습니다 - 코드가 내 코드에만 해당합니까? 예입니까? 확장 기능을 먼저 정렬 한 다음 파일 이름을 정렬 하시겠습니까? 아니면 ... ... 내 "여기"가 내 예제에 표시되는 곳에 입력해야하는 코드 조각입니까? 감사. – mar2195

+0

첫 번째 줄은 명령 줄에서 ls 또는 dir 명령을 수행하고 배열을 반환하는 경우와 거의 비슷한 파일 목록을 가져옵니다. 두 번째 명령은 파일 이름 부분 만 가져옵니다 (glob는 표현 된대로 경로를 제공합니다). natcasesort는 배열의 "인간"정렬을 수행합니다 ... 결국에는 배열을 걸러서 html을 출력 할 수 있어야합니다. – Orangepill

+0

첫 줄은 명령 줄에서 ls 또는 dir 명령을 수행하고 배열을 반환하는 경우와 거의 비슷한 파일 목록을 가져옵니다. ... "$ directory"변수가 내 코드와 관련이 없습니까? – mar2195

0
foreach ($example as $value) { 
    $file[] = $value; 
//regex would be better incase you have files with more than one period 
    list($ext, $nam) = explode('.'$value); 
    $extention[] = $ext; 
    $name[] = $nam; 
} 

a_sort($extention); 
a_sort($name); 


foreach($extention as $key=>$value){ 
    echo $file[$key]."<br/>"; 
} 

foreach($name as $key=>$value){ 
    echo $file[$key]."<br/>"; 
} 
+0

내 코드 예제와 관련하여 ... 위의 코드를 WHILE 또는 WHILE 내에 두겠습니까? – mar2195