2015-01-14 23 views
1

我基本上有一個表單提交時創建一個文件夾,它將最後創建的文件夾(例如文件夾名稱爲7),並基於最後創建的文件夾創建一個新的地圖( 7 + 1)thuss製作一個名爲8等的新文件夾等。Scandir()顯示最新的文件夾

但是,當我創建一個名稱爲10的地圖並且echo $latest_dir它仍然會顯示9 ..但它應該始終顯示最高數字。

$maindir = scandir("uploads/"); 
$latest_dir = $maindir[0]; 
$new_dir = $latest_dir+1; 

echo $latest_dir; 

這可能是一個愚蠢的問題,但我真的不使用PHP好,這是迄今沒有工作的唯一的事。任何幫助,非常感謝:)

+3

這是由於定期排序與自然排序。 '10'低於'9'(因爲它以'1開始)。您可能正在尋找['natsort()'](http://php.net/manual/en/function.natsort.php)。 – h2ooooooo

+0

@ h2ooooooo我會檢查一下,我看起來很有趣! –

+0

@brancoholtslag然後道歉! h2oo是現貨,但'netsort'看起來完美,你需要:) – MackieeE

回答

0

這是我的代碼,我沒有測試過,但我認爲它的工作原理。

$maindir = scandir("uploads/"); 

//remove '.' and '..' folder you can also use a regex to be sur to have only folder with 
// number after filter 
$mainDir = array_filter($maindir, function ($fileName) { 
    if ($fileName !== "." || $fileName !== "..") { 
     return TRUE; 
    } 
    else { 
     return FALSE; 
    } 
} 

$maxNumber = 0; 

// Browse the array in order get the highest number (maybe you could use natsort() instead 
for($i = 0 ; $i < count($mainDir) ; $i++) { 
    if($maxNumber > (int) $mainDir[i]) { 
     $maxNumber = (int) $mainDir[i]; 
    } 
} 

$new_dir = $maxNumber + 1; 
+0

感謝您的回答,但我已經設法解決我的問題使用rsort() 看到我的回答上面:) –

0

我得到了這個問題固定的文件夾沒有正確排序,我改變了我的代碼如下:

$maindir = scandir("uploads/",1); 
rsort($maindir); 
$latest_dir = $maindir[0]; 
$new_dir = $latest_dir+1; 

它正確地定購文件夾,並始終表現出最高的文件夾名稱。 感謝大家的幫助:)