PHP - 爆炸/移动/文件名(PHP - Exploding / Moving / Filena

2019-11-03 09:33发布

不知道你是否能帮助,我是新来的PHP和我坚持。 我有文件的加载,看起来就像这样:

2014年4月1日NS122345 - 日期,该人的姓名缩写,有员工代码。

我希望能有NS或JB或Ga的文件移动到有相关文件夹/目录。 因此,对于NS它将进入弥敦道桑德斯文件夹,JB到乔·贝利文件夹。

有几个人对我说,使用爆炸和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);

任何帮助深表感谢。 或者,如果你可以点我的例子/文档,那将是巨大的。

谢谢

Answer 1:

假设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);
    }
}


文章来源: PHP - Exploding / Moving / Filename