条件语句中的PHP“或”运算符 - newb问题!

时间:2010-09-03 08:12:54

标签: php

请原谅我,如果之前有这个问题,我搜索无济于事。

我有一个脚本可以查看目录以查找其中的文件。有条件行只查找具有特定扩展名的文件:

if(strtolower(substr($file, -3)) == "mp4"){...

这样只会查找扩展名为“mp4”的文件。

我需要添加一些“或”运算符来添加另外两种扩展类型。我尝试了以下但是没有用:

if(strtolower(substr($file, -3)) == "mp4" || == "mov" || == "flv"){...

现在该行似乎被忽略,它获取目录中的每个文件。 如果有人能帮助我,我将非常感激! 我知道这可能是基本的,但我对PHP的掌握是非常有限(虽然我确实看到它的美丽!!!)

提前致谢。

8 个答案:

答案 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':       ///一些操作       打破; }