2017-04-13 7 views
1

私はいくつかのディレクトリのファイル名を取得する関数を持っています。ディレクトリには複数のPDFファイルがあります。Foreach要素に配列キーを生成する

ファイル名に-.pdfの間にあるキーをキーにして、それぞれのPDFファイルにキーを割り当てたいとします。私が持っていたい何

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

:例えば

私は3つのPDFファイルを持っている

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

My機能は、現在、このです:

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) - 整数にキャスト(もし必要)

レシピ:それはIDの前に来るよう

  1. は、(最後の)ダッシュ(-)の位置を検索します。
  2. それはIDの後に来るようsubstr()とIDとステップ1(及び2)で収集した情報からストリップ
  3. (下記参照)、
  4. を(最後)のドット(.)の位置を探します

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

または何でもそれはあなたが必要です:必要に応じて、そのような連想配列を、埋めるためにIDを使用しています。

PS:

代わりの最後のドットの位置を見つけ、あなたはまた、単にそれはファイル名の末尾の前には常に4つの文字であることを前提としていことができました。安全な賭けに見えます。ヒント:substr()は、startパラメータとして負の数を取ることができます。@domdomへ

+0

こんにちは、すばらしい説明のおかげで、私は各ファイルの番号を取得し、それぞれのキーとして割り当てようとしています要素 –

+0

ええ、それを渦巻かせてください。それがうまくいけば返信してください。 – domsson

+0

こんにちは、それは働いて、ありがとう! –

0

おかげで、彼のレシピは完全に働いた:)私は私のforeachに以下のコードを追加し

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

その後、

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

しかし、そこには9以上のPDFファイルが存在するでしょうか? ?その場合は、ファイル名から数を解析するために2文字を取得する必要があります。したがって、私の答えのステップ2。もちろん、9つ以上のファイルが存在しないことを知っているなら、あなたはいいです。 – domsson

関連する問題