2017-04-13 73 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

相關問題