2015-01-14 5 views
1

У меня в основном есть форма, которая создает папку при отправке, она занимает последнюю созданную папку (например, имя папки 7) и создает новую карту на основе последней созданной папки (7 + 1), создавая новую папку с именем 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; 

Он заказывает папки правильно и всегда показывает самое высокое имя папки. Спасибо за помощь всем :)