2012-02-14 282 views
0

我很新的PHP所以我還在學習非常基礎,但是我想創建一個圖片庫。按字母順序排序由opendir()

經過無數谷歌搜索後,我發現了一個PHP腳本,做什麼,我希望它做的,看代碼,並稍微操縱它,它與我的網站可以正常使用後,除了圖像不是按字母順序排列的。

這是代碼

$max_width = 100; 
$max_height = 100; 
$imagedir = 'gifs/animals/'; //Remember trailing slash 


function getPictureType($ext) { 
    if (preg_match('/jpg|jpeg/i', $ext)) { 
     return 'jpg'; 
    } else if (preg_match('/png/i', $ext)) { 
     return 'png'; 
    } else if (preg_match('/gif/i', $ext)) { 
     return 'gif'; 
    } else { 
     return ''; 
    } 
} 

function getPictures() { 
    global $max_width, $max_height, $imagedir; 
    if ($handle = opendir($imagedir)) { 
     $lightbox = rand(); 
     echo '<ul id="pictures">'; 
     while (($file = readdir($handle)) !== false) { 
      if (!is_dir($file)) { 
       $split = explode($imagedir, $file); 
       $ext = $split[count($split) - 1]; 
       if (($type = getPictureType($ext)) == '') { 
        continue; 
       } 

       $name = substr($file, 0, -4); 
       $title = str_replace("_"," ",$name); 
       echo '<li><a href="'.$name.'">'; 
       echo '<img src="thumbs/'.$file.'" class="pictures" alt="'.$file.'" />'; 
       echo '</a>'; 
       echo ''.$title.''; 
       echo '</li>'; 
      } 
     } 
     echo '</ul>'; 

    } 
} 

我使用這在按字母順序排序它們的運作SCANDIR()函數,但是我留下了的陣列。然後,我使用implode函數將數組連接在一起,然而之後我仍然不知所措。

任何幫助將不勝感激!

乾杯。

回答

1

有什麼不對的陣列? 此外,如果您使用pathinfo來獲取文件名和擴展名會更好。

$max_width = 100; 
$max_height = 100; 
$imagedir = 'gifs/animals/'; //Remember trailing slash 


function getPictureType($ext) { 
    if (preg_match('/jpg|jpeg/i', $ext)) { 
     return 'jpg'; 
    } else if (preg_match('/png/i', $ext)) { 
     return 'png'; 
    } else if (preg_match('/gif/i', $ext)) { 
     return 'gif'; 
    } else { 
     return ''; 
    } 
} 

function getPictures() { 
    global $max_width, $max_height, $imagedir; 
    if ($files = scandir($imagedir)) { 
     $lightbox = rand(); 
     echo '<ul id="pictures">'; 
     foreach ($files as $file) { 
      $full_path = $imagedir.'/'.$file; 
      if (!is_dir($file)) { 
       $finfo = pathinfo($full_path); 
       $ext = $finfo['extension']; 
       if (($type = getPictureType($ext)) == '') { 
        continue; 
       } 

       $name = $finfo['filename']; 
       $title = str_replace("_"," ",$name); 
       echo '<li><a href="'.$name.'">'; 
       echo '<img src="thumbs/'.$file.'" class="pictures" alt="'.$file.'" />'; 
       echo '</a>'; 
       echo ''.$title.''; 
       echo '</li>'; 
      } 
     } 
     echo '</ul>'; 

    } 
} 
+0

謝謝,這工作。 – Polar 2012-02-14 09:27:43

2

您可以使用​​3210獲取某個目錄中的文件,按字母順序排序:

$files = glob('gifs/animals/*.{gif,jpg,png}', GLOB_BRACE); 

遍歷文件,使用foreach循環:

foreach($files as $file){ 
    $title = str_replace("_"," ",$file); 
    echo '<li><a href="'.$name.'">'; 
    echo '<img src="thumbs/'.basename($file).'" class="pictures" alt="'.basename($file).'" />'; 
    echo '</a>'; 
    echo ''.$title.''; 
    echo '</li>'; 
} 
+0

這適用於字母排序,我非常感謝您的回覆。但是,由於$ file現在輸出/gifs/animals/image.gif我無法正確鏈接到位於gifs/animals/thumbs上的拇指 – Polar 2012-02-14 07:20:22

+0

@Polar:使用'basename()'刪除路徑,我相應地更新了我的答案。 – konsolenfreddy 2012-02-14 07:42:47