请原谅我,如果之前有这个问题,我搜索无济于事。
我有一个脚本可以查看目录以查找其中的文件。有条件行只查找具有特定扩展名的文件:
if(strtolower(substr($file, -3)) == "mp4"){...
这样只会查找扩展名为“mp4”的文件。
我需要添加一些“或”运算符来添加另外两种扩展类型。我尝试了以下但是没有用:
if(strtolower(substr($file, -3)) == "mp4" || == "mov" || == "flv"){...
现在该行似乎被忽略,它获取目录中的每个文件。 如果有人能帮助我,我将非常感激! 我知道这可能是基本的,但我对PHP的掌握是非常有限(虽然我确实看到它的美丽!!!)
提前致谢。
答案 0 :(得分:12)
您尝试它的方式不起作用,因为比较运算符==
是binary operator并且需要两个操作数,即operand1 == operand2
。这同样适用于也是二元运算符的逻辑OR运算符,即operand1 || operand2
。
这意味着你需要写下这样的东西:
$ext = strtolower(substr($file, -3));
if ($ext == "mp4" || $ext == "mov" || $ext == "flv")
此处$ext
仅用于避免重复调用strtolower(substr($file, -3))
。在这种情况下,每个二元运算符都有两个操作数:
((($ext == "mp4") || ($ext == "mov")) || ($ext == "flv"))
\__/ \___/
\__==___/ \__/ \___/
\ \__==___/
\_______||_______/
\ \__/ \___/
\ \__==___/
\________________||_______/
(我添加了括号以突出显示表达式的评估顺序。)
所以这就是你必须写的方式。
但您也可以使用数组和in_array
:
in_array(strtolower(substr($file, -3)), array("mp4","mov","flv"))
pathinfo
可能更适合获取文件扩展名,因此:
in_array(pathinfo($file, PATHINFO_EXTENSION), array("mp4","mov","flv"))
答案 1 :(得分:4)
问题是PHP不会自动知道您要在每个“或”部分中与strtolower(substr($file, -3))
进行比较。您需要明确说明:
if(strtolower(substr($file, -3)) == "mp4" || strtolower(substr($file, -3)) == "mov" || strtolower(substr($file, -3)) == "flv"){...
请注意,执行以下操作可能更为简洁:
$tmp = strtolower(substr($file, -3));
if($tmp == "mp4" || $tmp == "mov" || $tmp == "flv"){...
答案 2 :(得分:2)
$ext = strtolower(substr($file, -3));
if($ext == "mp4" || $ext == "mov" || $ext == "flv"){...
答案 3 :(得分:2)
另一种方法:
if ( in_array(strtolower(substr($file, -3))), array('mp4', 'mov', 'flv') ) {
// do something
}
答案 4 :(得分:1)
更简洁的方式:
if ( preg_match('/(mp4|mov|flv)$/', $file) ) { ...
答案 5 :(得分:1)
如果您只想匹配目录中的特定文件名,可以使用glob
$files = glob('/path/to/dir/*.{mp4,mov,flv}', GLOB_BRACE);
返回匹配文件路径的数组。
或者您使用fnmatch
将文件名与模式匹配。
此外,如果您想确保图片确实是图片,请考虑checking against the MimeType而不是扩展名
答案 6 :(得分:0)
如果您想使用||
进行比较,请输入以下语法:
if(strtolower(substr($file, -3)) == "mp4" || strtolower(substr($file, -3)) == "mov" || strtolower(substr($file, -3)) == "flv"){...
当然要让它快一点,在变量中填充strtolower(substr($file, -3))
,这样php就不会多次执行这些函数:
$extension=strtolower(substr($file, -3));
if($extension == "mp4" || $extension == "mov" || $extension == "flv"){...
另一个好消息是,PHP有一个内置函数来搜索值数组(in_array
)中是否存在值:
if(in_array(strtolower(substr($file, -3)), array('mp4', 'mov', 'flv')))
最后一件事,如果你有简单的字符串,那些你不希望php扩展变量和内部的东西,use single qutations instead of doubles,这是一个很好的做法,节省了一些执行时间(当然勉强注意到一两串,但这是长距离的好习惯。)
答案 7 :(得分:0)
$ ext = strtolower(substr($ file,-3));
开关($ ext) { 案例'mp4': 案例'mov': 案例'flv': ///一些操作 打破; }