2011-08-30 97 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 cool code :) – alex