2016-03-29 19 views
1

Ich habe Bildinhalte, die in Ordnern wie folgt gespeichert werden:Gruppe Ordner in einen anderen Ordner

Contents 
--> Content1 
--> Content2543 
--> Content3654 
--> Content4456 
--> Content5456 
--> Content6765 
--> Content9565 

Und so weiter, bis Inhalt 700k.

Ich muss ändern, wie Inhalte gespeichert werden, so dass es nicht mehr als 1000 Ordner im selben Ordner gibt, also habe ich beschlossen, den Inhalt in einen anderen Ordner innerhalb eines Bereichs zu verschieben, z. B. Inhalt mit ID zwischen 1 und 1000 geht innerhalb einer Ordnernamen Contents1-1000

Das erwartete Ergebnis wäre:

Contents 
--> Contents1-1000 
    --> Content1 
--> Contents1001-2000 
--> Contents2001-3000 
    --> Content2543 
--> Contents3001-4000 
    --> Content3654 
--> Contents4001-5000 
    --> Content4456 
--> Contents5001-6000 
    --> Content5456 
--> Contents6001-7000 
    --> Content6765 
--> Contents7001-8000 
--> Contents8001-9000 
--> Contents9001-10000 
    --> Content9565 

ich weiß, wie neue Inhalte in diesen Ordner-Struktur zu richten, aber ich weiß nicht, wie aktuelle Inhalte dieser Struktur addapt, Bisher habe ich folgendes:

$directories = glob($_SERVER['DOCUMENT_ROOT'].'/contents/*' , GLOB_ONLYDIR); 

foreach($directories as $dir) { 
rename(basename($dir), basename($dir)); 
} 

Aber ich vermisse wie man über den Namen der Ordner iteriert, so dass Inhalt 26304 in den Ordner 26001-27000 geht.

Dank

Antwort

2

Sie können wie etwas versuchen:

$directoryIterator = new DirectoryIterator($_SERVER['DOCUMENT_ROOT'] . '/contents'); 

foreach ($directoryIterator as $fileInfo) { 
    if ($fileInfo->isDot() || !$fileInfo->isDir()) { 
     continue; 
    } 

    preg_match('/\d+$/', $fileInfo->getFilename(), $directoryNumber); 

    $rangeMin = floor($directoryNumber[0]/1000) * 1000 + 1; 
    $range = array($rangeMin, $rangeMin + 999); 

    $newPath = $fileInfo->getPath() 
     . '/Contents' 
     . implode('-', $range) 
     . '/' 
     . $fileInfo->getFilename(); 

    rename($fileInfo->getPathname(), $newPath); 
} 

PS: Bitte beachten Sie, dass dieser Code nicht getestet und kann einige Verbesserungen richtig arbeiten müssen.

0
$directories = glob($_SERVER['DOCUMENT_ROOT'].'/acuarelas/contenidos/*' , GLOB_ONLYDIR); 



foreach($directories as $dir) { 
$id = basename($dir); 

$alocator = floor($id/1000); 
$alocatordir = ($alocator*1000)."-".(($alocator*1000)+1000); 


echo $alocatordir."/".$id."<br>"; 

} 
0

Hier ist, wie Sie es für jede einzelne Inhalte tun konnte Datei $curFilename:

$curFilename = "Content26304"; 

preg_match('/[0-9]/', $curFilename, $matches, PREG_OFFSET_CAPTURE); 

$id = substr($curFilename, $matches[0][1]); 
$minFolder = (floor($id/1000) * 1000) + 1; 
$maxFolder = ($minFolder - 1) + 1000; 

So können Sie die Ausgabe sehen:

echo "File [$curFilename] should go to [$minFolder]-[$maxFolder]"; 
Verwandte Themen