2011-08-30 9 views
1

배열의 각 항목 끝에 .htm을 어떻게 제거 할 수 있습니까? 나는 PHP에 매우 익숙하다. 그래서 가능한 한 구체적인 도움을 주시면 대단히 감사하겠습니다.PHP 배열의 항목에서 .htm 제거

<?PHP 

    $myDirectory = opendir("pages/"); 

    while($entryName = readdir($myDirectory)) { 
     $dirArray[] = $entryName; 
    } 

    closedir($myDirectory); 

    $indexCount = count($dirArray); 

    sort($dirArray); 

    for($index=0; $index < $indexCount; $index++) { 
      if (substr("$dirArray[$index]", 0, 1) != "."){ // don't list hidden files 
      print("<a href=\"index.php?p=$dirArray[$index]\">$dirArray[$index]</a>/n"); 
     } 
    } 
?> 

답변

4

문자열이 당신을 위해 작동해야 다음과 같은 기능을 통해 수정할 문자열 실행, 항상 마지막에 .htm이 보장되지 않는다는 가정 :

$str = preg_replace('/\.htm$/', '', $str); 
을 여기

내 스크립트입니다
+0

마지막에는 .htm이 항상 있어야하지만이 방법을 시도해 보겠습니다. – JacobTheDev

3

array_map() (배열에 대해 반복) 및 pathinfo() (파일 이름 부분에서 확장자 빼기)을 사용할 수 있습니다.

모든 파일 이름 확장자에서 작동합니다.

$dirArray = array_map(function($item) { 
    return pathinfo($item, PATHINFO_FILENAME); 
}, $dirArray); 

CodePad.

익명 함수는 PHP 5.3 이상입니다. 이전 버전을 사용하는 경우 명명 된 함수를 사용하십시오.

1

이터레이터를 사용하여 코드를 단순화 할 수 있습니다. 예를 들면 다음과 같습니다.

foreach (new DirectoryIterator('pages') as $fileInfo) { 
    if ($fileInfo->isFile()) { 
     $name = $fileInfo->getBasename('.htm'); 
     print("<a href='index.php?p=$name'>$name</a><br>"); 
    } 
} 
+0

+1 멋진 코드 :) – alex

관련 문제