我目前正在编写一个下载管理器,我问自己是否可能:
if($ext == ('zip' || 'png')) { echo "Is it possible ?" }
每次都返回true,所以我想这是不可能的。但是你知道我怎么能轻易做到这一点吗?我的意思是,不有很多“if”或“switch”......
非常感谢! :)
答案 0 :(得分:22)
您可以使用in_array($ext,array('png','zip','another','more'))
答案 1 :(得分:11)
if($ext == ('zip' || 'png'))
按以下顺序进行比较 - > ('zip' || 'png')
,因为至少有一个不为null,返回TRUE。替换现在,($ext == TRUE)
,我将会出局,并猜测php只是评估它与($ext)
一样,这也是正确的。
if ( $ext == 'zip' || $ext == 'png' )
会检查您要查找的内容。
答案 2 :(得分:5)
您可以使用switch-case声明:
switch($ext)
{
case 'png':
case 'zip':
// Will run for both 'png' and 'zip'
echo "It is possible";
break;
default:
echo "unknown extension!";
break;
}
答案 3 :(得分:3)
您可以使用正则表达式,例如
if(preg_match("/^(zip|png)$/", $ext) { echo “It is possible!” }
相关问题:Checking for file-extensions in PHP with Regular expressions
答案 4 :(得分:3)
if(($ext == 'zip') || ($ext == 'png')) { echo "It's possible." }
答案 5 :(得分:2)
这绝对是可能的,但你在那里做的是错误的代码。这是你写的:
if($ext == ('zip' || 'png')) { echo "Is it possible ?" }
以下是php中的翻译内容:
if( (if $ext evaluates to true then return true) == ( if 'zip' evaluates to true then return true || if 'png' evaluates to true then return true ) )
所以,因为'zip'不是php中定义的'empty'或'false'值之一,也不是'png'你基本上运行这个if语句:
if($ext == true)
如果它不是空的,那就是。
你想要的是 - 如前所述:
if($ext == 'zip' || $ext == 'png')
答案 6 :(得分:2)
微小的建议:PHP在某种意义上使用类似于C布尔类型的处理,实际上任何非零值在驻留在if语句的条件部分时被认为是“真”。例如,如果您在比较构造中错过'='符号并键入if($var = "val")
而不是if($var == "val")
,那么您将始终在该语句中获得一个真值,因为'='运算符将作为set的结果返回 - 右边部分“val”的操作值,然后转换为“true”。因此,最好在比较条件if("val" == $var)
的左侧部分写入文字,因为在这种情况下,如果在'=='比较中松开一个'='符号,则会出现错误。
所以你的if语句必须如下所示:
if('zip' == $ext || 'png' == $ext) { echo "Is it possible ?" }
也可能最好将'zip'和'png'文字放在名称为FILE_TYPE_ZIP,FILE_TYPE_PNG的常量中,或者定义一些枚举实体,如全局PHP数组,它位于源页面的顶部,甚至可能是在外部文件中创建一些单独的类SupportedFileTypes,以强调程序支持的文件类型(在这种情况下,请查看PHP and Enumerations以获取详细信息)。
在开始提出性能问题时,不必打扰你,因为编写易于阅读和进化/优化的代码至关重要。
答案 7 :(得分:1)
if (in_array($ext, array('png', 'zip'))) {
echo "Is it possible ?"
}
如果需要多次,可以将数组存储在某个地方。
答案 8 :(得分:0)
您可以简单地使用:
if($ext == 'zip' || $ext == 'png')
{
echo "It's possible";
}