从字符串

时间:2016-06-01 17:51:15

标签: php

我正在尝试使get_extension()函数返回文件扩展名,如果它包含在支持的文件类型数组中。现在它不返回任何东西。

我已经测试了我的contains()功能,它看起来像我想要的那样工作,但我无法弄清楚为什么get_extension()无法正常工作。我如何声明我的数组是一个问题吗?

$supported = ['.md', '.txt', '.html', '.pdf'];

function get_extension($name){
  foreach ($supported as $type){
    if(contains($name, $type)){
      return $type;
    }
  }
}

function contains($outer, $inner){
  return strpos($outer, $inner) !== false;
}

echo get_extension("spencer.txt");

4 个答案:

答案 0 :(得分:1)

您可以将pathinfo方法与PATHINFO_EXTENSION标志一起使用,它将返回您的文件扩展名。

此后你可以将你的supportedextensions数组传递给function,它将通过数组中存在的检查扩展名返回true false,或者不使用in_array

$supported = ['md', 'txt', 'html', 'pdf'];

function get_extension($name, $supportedExtns){
    $extn = pathinfo($name, PATHINFO_EXTENSION);
    if(in_array($extn, $supportedExtns))
        return true;
    return false;
}


if(get_extension("spencer.txt", $supported)){
    echo 'extn exists in array';
} else {
    echo 'extn doesn\'t exists in array';
}

答案 1 :(得分:1)

范围 范围 范围 get_extension()不知道$supported是什么将它作为参数传递,或者在这种情况下,我可能会在函数

中定义$supported
function get_extension($name){
  $supported = ['.md', '.txt', '.html', '.pdf'];

  foreach ($supported as $type){
    if(contains($name, $type)){
      return $type;
    }
  }
}

答案 2 :(得分:0)

由于 会有多个需要访问数组的函数,因此我在函数中添加了global个关键字以使其可访问。

$supported = ['.md', '.txt', '.html', '.pdf'];

function get_extension($name){
  global $supported;
  foreach ($supported as $type){
    if(contains($name, $type)){
      return $type;
    }
  }
}

答案 3 :(得分:0)

你可以在php中使用public string SplFileInfo::getExtension (void)函数,看下面修改过的函数,你的函数没有得到支持变量,因为它没有作为GLOBAL访问

$supported = array("txt", "md", "html", "pdf");

function get_extension($name)
{
  $obj = new SplFileInfo($name);
  $extension=$obj->getExtension();
  if(in_array($extension,$GLOBALS['supported']))
  {
      return $extension;
  }
  else
  {
      return "Extension is not supported";
  }
}

echo get_extension("spencer.txt");