关于PHP:if($ext == (‘zip’ || ‘png’)) { echo “Is it possible ?” }

if($ext == ('zip' || 'png')) { echo “Is it possible ?” }

我现在正在写一个下载管理器,我问自己这是否可行:

1
if($ext == ('zip' || 'png')) { echo"Is it possible ?" }

它每次都会返回真值,所以我想这是不可能的。但你知道我怎么能轻松做到这一点吗?我的意思是,没有足够的"if"或"switch"…

无论如何,谢谢!:)


你可以用in_array($ext,array('png','zip','another','more'))

请参见:http://php.net/manual/en/function.in-array.php


if($ext == ('zip' || 'png'))按以下顺序进行比较->('zip' || 'png'),因为至少有一个不为空,所以返回true。现在,用($ext == TRUE)代替它,我要冒险去猜测,php只是和($ext)一样对它进行评估,这也是正确的。

if ( $ext == 'zip' || $ext == 'png' )将检查您要查找的内容。


您可以使用switch case语句:

1
2
3
4
5
6
7
8
9
10
11
switch($ext)
{
  case 'png':
  case 'zip':
       // Will run for both 'png' and 'zip'
       echo"It is possible";
       break;
  default:
       echo"unknown extension!";
       break;
 }


1
if(($ext == 'zip') || ($ext == 'png')) { echo"It's possible." }


您可以使用正则表达式,例如

1
if(preg_match("/^(zip|png)$/", $ext) { echo"It is possible!" }

相关问题:使用正则表达式检查PHP中的文件扩展名


小建议:PHP使用类似于C布尔类型处理的方法,在某种意义上,如果驻留在if-语句的条件部分,那么任何非零值都被认为是"真的"。例如,如果在比较构造中缺少"="符号,并且键入if($var ="val")而不是if($var =="val"),则在该语句中始终会得到一个真值,因为"="运算符将返回右部分"val"的设置操作值,而该部分反过来转换为"true"。所以最好在比较条件if("val" == $var)的左边写一个字,因为在这种情况下,如果在=='比较中松开一个='符号,就会出错。

所以你的if语句必须如下所示:if('zip' == $ext || 'png' == $ext) { echo"Is it possible ?" }

另外,最好将"zip"和"png"文本放在名为file_type_zip、file_type_png的常量中,或者定义一些枚举实体(如位于源页面顶部的全局php数组),或者甚至在外部文件中创建一些单独的类支持的file types,以强调您的pr支持的文件类型。(在这种情况下,请查看PHP和枚举以了解详细信息)。

在开发开始时,性能问题不必麻烦您,因为编写代码是非常重要的,这在将来很容易阅读和发展/优化。


这是绝对可能的,但你所做的是错误的代码。这是你写的:

1
if($ext == ('zip' || 'png')) { echo"Is it possible ?" }

下面是用PHP翻译的内容:

1
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语句:

1
if($ext == true)

如果不是空的,就是空的。

你想要的是-如前所述:

1
if($ext == 'zip' || $ext == 'png')

1
2
3
if (in_array($ext, array('png', 'zip'))) {
    echo"Is it possible ?"
}

如果多次需要,可以将数组存储在某个地方。