2014-10-27 60 views
0

不知道你是否可以幫忙,我是新來的PHP和卡住了。我有大量文件看起來像這樣:PHP - 爆炸/移動/文件名

2014-04-01 NS122345 - 日期,人的姓名縮寫以及員工代碼。

我希望能夠將具有NS或JB或GA的文件移動到相關文件夾/目錄中。所以對於NS來說,它會進入Nathan Saunders文件夾,因爲JB會進入Joe Bailey文件夾。

有幾個人對我說要使用explode和substr來分割文件名,然後我猜想通過數組搜索。有人說這樣使用:

$array = explode(' ', $filename); 
$firstTwoLetters = string substr ($array[1], 0, 2); 

但我得到錯誤的變量文件名未定義。

不幸的是我沒有線索。我通過論壇搜索論壇和發佈帖子後,我已經跟從了這個至今:

if(JFile::exists($searchpath .DS. '.doc')){ 
    JFile::move($searchpath .DS. '.doc', JPATH_BASE .DS. 'upload' .DS. 'Nathan' .DS. '.doc'); } 

我的目錄結構是這樣的:

root/wan/upload - Where files/images/docs are stored. Inside upload folder i have: 
>2014-04-08 NS6565.doc 
>2012-01-03 JB8932.doc 
>2013-02-01 GA5434.doc 
>etc 
root/wan/administrator/components/com_upload - where my code is stored 

問題是,我有幾百萬的這些文件,而我在上面給出的例子開始時的日期將會改變。

我試圖把它們放入數組,但在那裏不知道如何再拆/調用正確的擺在正確的文件夾:

嘗試 - 陣列

$dir = JPATH_BASE . DS . "upload"; 
$basename = basename($dir); 
$array = scandir($dir); 
$filename = basename($dir[0]); 
print_r($array); 
print_r($basename); 

任何幫助非常感激。或者,如果你可以指點我的例子/文檔,那會很棒。 。

感謝

回答

2

假設DS是DIRECTORY_SEPARATOR

$dir = JPATH_BASE . DS . "upload"; 
$folders = array('NS'=>'/path/to/Nathan/Saunders/Folder','JB'=>'/path/to/Joe/Bailey/folder'); 
$files = scandir($dir); 
foreach($files AS $file){ 
    if(!is_file($dir.DS.$file)){ continue; } 
    $array = explode(' ', $file); 
    if(count($array)<2){ continue; } 
    $firstTwoLetters = substr($array[1], 0, 2); 
    if(!empty($folders[$firstTwoLetters])){ 
     rename($dir.DS.$file,$folders[$firstTwoLetters].DS.$file); 
    } 
} 
+0

該網頁似乎變成空白頁時,我加在上面所以運行它的PHP代碼檢查工具,它標誌了在:PHP語法檢查:解析如果(!is_file($ dir.DS. $ file){continue;} – Simpson 2014-10-27 14:29:01

+0

)錯誤:語法錯誤,在第72行的代碼中意外的'{''''')。編輯的代碼。 – MIvanIsten 2014-10-27 14:38:31

+0

OH WOW !!!!!!非常感謝你的工作。我只剩下一個錯誤:未定義偏移量:1行74,即:$ firstTwoLetters = substr($ array [1],0,2);. – Simpson 2014-10-27 14:45:05