Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在php中将文件名拆分为数组(key=>value)?_Php_Arrays_String_Foreach_Explode - Fatal编程技术网

如何在php中将文件名拆分为数组(key=>value)?

如何在php中将文件名拆分为数组(key=>value)?,php,arrays,string,foreach,explode,Php,Arrays,String,Foreach,Explode,我有一个生成器,可以创建如下PDF文件: 并将文件上载到服务器上的./files/文件夹中 我使用以下代码获取数组: <?php $files = glob('files/*.{PDF,pdf}', GLOB_BRACE); print_r($files); 现在我想将每个文件名拆分为用户和密码。例如,如果我有这样的文件:035180-482460.PDF,我应该有: file['user] = 035180; file['password'] = 482460; 我知道,我将for

我有一个生成器,可以创建如下PDF文件:

并将文件上载到服务器上的./files/文件夹中

我使用以下代码获取数组:

<?php 
$files = glob('files/*.{PDF,pdf}', GLOB_BRACE);
print_r($files);
现在我想将每个文件名拆分为用户和密码。例如,如果我有这样的文件:035180-482460.PDF,我应该有:

file['user] = 035180;
file['password'] = 482460;
我知道,我将foreach文件显示为key=>value和一些要拆分文件名的内容;但我不知道我该怎么做

您可以使用和:

首先,将文件/035146-761326.PDF转换为035146-761326.PDF,然后使用和只返回文件名(不包括扩展名),然后使用-分解,得到两个部分。

尝试:

<?php 
$files = glob('files/*.{PDF,pdf}', GLOB_BRACE);
print_r($files);
foreach($files as $file) { 
   $file = preg_replace('/\/(?=.*\/)/', ' ',  $file); // it will solve the ./files/ issue which you mentioned in comment
   //  suppose $file is files/035146-761326.PDF
   $arr = explode("/",$file); // it will give array( [0]=>files and [1]=> 035146-761326.PDF)
   $filename = explode(".",$arr[1]); // now split $arr[1] with dot, so will give new array array([0] => "035146-761326", [1] => "pdf")
   $arrname = explode("-",$filename[0]); // now split $filename[0] with - so it will give array ([0]=>035146 , [1] =>761326 )
   echo "username: ".$arrname[0];
   echo "password: ".$arrname[1];
}

?>

在这种情况下,数组映射非常有用:

$files = array_map(function($name){
  preg_match('#(\d+)-(\d+)#', $name, $matches); //get user and password
  return array(
    'name' => $name,
    'user' => $matches[1],
    'password' => $matches[2]
  );
}, $files);

print_r($files);

我对文件/035146-761326.PDF有另一个问题。如何删除文件/?Basename返回排除任何路径的文件名,因此它将删除您至少应该给出您尝试过的文件名!我对文件/035146-761326.PDF还有一个问题,如何删除。/files/?php中匿名函数的一个很好的例子!很高兴听到:
<?php 
$files = glob('files/*.{PDF,pdf}', GLOB_BRACE);
print_r($files);
foreach($files as $file) { 
   $file = preg_replace('/\/(?=.*\/)/', ' ',  $file); // it will solve the ./files/ issue which you mentioned in comment
   //  suppose $file is files/035146-761326.PDF
   $arr = explode("/",$file); // it will give array( [0]=>files and [1]=> 035146-761326.PDF)
   $filename = explode(".",$arr[1]); // now split $arr[1] with dot, so will give new array array([0] => "035146-761326", [1] => "pdf")
   $arrname = explode("-",$filename[0]); // now split $filename[0] with - so it will give array ([0]=>035146 , [1] =>761326 )
   echo "username: ".$arrname[0];
   echo "password: ".$arrname[1];
}

?>
$files = array_map(function($name){
  preg_match('#(\d+)-(\d+)#', $name, $matches); //get user and password
  return array(
    'name' => $name,
    'user' => $matches[1],
    'password' => $matches[2]
  );
}, $files);

print_r($files);