PHP:计算字符串上的扩展名

时间:2016-02-19 13:21:30

标签: php regex file-extension

我有一个网络服务,使用', '作为分隔符向我返回一个包含上传文件列表的字符串。

示例: 01467_rbt.csv, 0152t.csv, 35302.png

我需要做的是计算每个扩展名出现在字符串上的次数。

上一示例的预期结果: .csv: 2 file(s); .png: 1 file(s)

我使用。\ w \ w \ w 使用preg_match_all作为正则表达式,但我不知道执行以下代码的最佳方法。< / p>

1 个答案:

答案 0 :(得分:2)

你可以做出类似的事情:

$string = '01467_rbt.csv, 0152t.csv, 35302.png';
$array = explode(", ", $string); // get an array with each filename

$result = array();

foreach ($array as $value) {
    $dexplode = explode(".", $value); // explode the filename on .
    $extension = end($dexplode); // get the last --> extension

    if(isset($result[$extension])) // if it's an existing extension
        $result[$extension]++; // add 1
    else // if not existing
        $result[$extension]=1; // init to 1
}

var_dump($result);

并且,例如,要获得csv文件的数量:

$result["csv"];

这是var_dump()的结果:

array (size=2)
  'csv' => int 2
  'png' => int 1

修改

您有很多可能找到文件扩展名:

$filename = 'mypic.gif';

// 1. The "explode/end" approach
$ext = end(explode('.', $filename));

// 2. The "strrchr" approach
$ext = substr(strrchr($filename, '.'), 1);

// 3. The "strrpos" approach
$ext = substr($filename, strrpos($filename, '.') + 1);

// 4. The "preg_replace" approach
$ext = preg_replace('/^.*\.([^.]+)$/D', '$1', $filename);

// 5. The "never use this" approach
//   From: http://php.about.com/od/finishedphp1/qt/file_ext_PHP.htm
$exts = split("[/\\.]", $filename);
$n = count($exts)-1;
$ext = $exts[$n];

更多细节here