PHP – Exploding / Moving / Filename

Gostaria de saber se você pode ajudar, sou novo no php e estou preso. Eu tenho muitos arquivos que se parecem com isto:

2014-04-01 NS122345 – A data, as iniciais da pessoa e o código do empregado.

Eu quero ser capaz de mover os arquivos que possuem NS ou JB ou GA em pastas / diretórios relevantes. Então, para NS, iria para a Nathan Saunders Folder, para JB na pasta Joe Bailey.

Alguns me disseram para usar o explodir e substr para dividir o nome do arquivo e então eu acho que pesquisar através da matriz. Alguém disse usar isso:

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

Mas eu recebo o erro de nome de arquivo variável não definido.

Infelizmente não tenho ideia. Tenho pesquisado através de fóruns após fóruns e postagens após postagens, eu vim com isso até agora:

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

A estrutura do meu diretório parece assim:

 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 

O problema é que eu tenho milhões desses arquivos, e a data no início do exemplo que eu dei acima mudará para cada um.

Eu tentei colocá-los em uma matriz, mas não tenho certeza de como dividir / chamar a direita para colocar na pasta certa:

Tentativa – Array

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

Qualquer ajuda é muito apreciada. Ou se você pode me indicar exemplos / documentação que serão ótimos.

obrigado

Supondo que o 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); } }