在Foreach元素中生成数组键

时间:2017-04-13 08:58:16

标签: php

我有一个函数可以检索某个目录中的文件名。该目录有多个PDF文件。

我想为我收集的每个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文档分配键?

提前致谢!

2 个答案:

答案 0 :(得分:2)

<强>成分:

  1. strrchr()查找字符串中最后一个字符
  2. substr()返回字符串的一部分
  3. (int) - 投放到整数(如果需要)
  4. <强>配方:

    1. 找到(最后一个)短划线(-)的位置,因为它位于ID之前。
    2. 找到(最后)点(.)的位置,因为它位于ID之后(见下文)
    3. 使用substr()删除ID以及在步骤1(和2)
    4. 中收集的信息
    5. (可选)使用ID填充关联数组,如下所示:

      $myPDFs = array();
      $myPDFs[$id] = $filename;
      
    6. 或者你需要的任何东西。

      <强> PS:

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

答案 1 :(得分:0)

感谢@domdom,他的食谱非常完美:)

我将以下代码添加到我的foreach中;

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

然后

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