2017-04-13 110 views
1

我有一个函数可以在某个目录中检索文件名。该目录有多个PDF文件。在Foreach元素中生成数组键

我想为我收集的每个PDF文件分配一个密钥,其中的密钥是位于文件名中的-.pdf之间的数字。

比如我有3个PDF文件:

abc-1.pdf 
abc-2.pdf 
abc-3.pdf 

我想拥有什么:

1 => abc-1.pdf, 
2 => abc-2.pdf, 
3 => abc-3.pdf 

我的功能是目前这样的:

function getPDFs($PDF_DIR_NAME, $PDF_TOKEN) { 
    if ($PDF_TOKEN == null || $PDF_TOKEN == '') { 
     return null; 
    } else { 
     $getPDFVersions = $PDF_TOKEN. 
     "*"; 
     $dirs = glob($PDF_DIR_NAME. 
      '/'.$getPDFVersions); 
     $files = array(); 
     foreach($dirs as $d) { 
      if (filesize($d) > 200) { 
       $files[] = basename($d); 
      } 
     } 
     return $files; 
    } 
} 

我如何分配密钥为每个PDF文档?

提前致谢!

+0

'$文件[$关键] = ...' – CBroe

+1

而不是分配,我想你的意思是你要分析从文件名的数量。在字符串中查找“ - ”和“.pdf”的位置,并使用substr获取中间的部分。 –

+0

我想分配'_'和'.pdf'之间的数字作为数组中的每个元素的键:) @SloanThrasher –

回答

2

主料:

  1. strrchr()查找字符的最后一次出现在一个字符串
  2. substr()字符串返回部分
  3. (int) - 转换成整数(如需要)

方药:

  1. 查找(上次)破折号(-)的位置,因为它涉及的ID之前。
  2. 查找(最近)的点(.)的位置,因为它涉及的ID后(见下文)
  3. 地带出与substr() ID和聚集在步骤1中的信息(和2)
  4. 或者,使用ID填充关联数组,像这样:

    $myPDFs = array(); 
    $myPDFs[$id] = $filename; 
    

或不管它是你需要的。

PS:

而是找到最后一个点的位置,你也可以简单地假设它总是在文件名的结束前4个字符。似乎一个安全的赌注。提示:substr()可以取其负数作为其参数start

+0

嗨,谢谢你的好解释,我将试图获取每个文件的数字,并将它们分配为每个文件的关键字元件 –

+0

是的,给它一个旋转,一定要报告回来,如果它成功了 – domsson

+0

嗨它的工作,谢谢你 –

0

由于@domdom,他的食谱工作完美:)

我在下面给我的foreach代码;

$versions= substr(strrchr(basename($d), "-"), 1); 
$versions= preg_replace('/\\.[^.\\s]{3,4}$/', '', $versions); 

然后

$files[$qualities] = basename($d); 
+0

有一件事:将会有超过9个PDF文件S'如果是这样,您将需要2个字符来解析文件名中的数字。因此,我的答案中的第2步。当然,如果你知道永远不会有超过9个文件,那你就很好。 – domsson

相关问题