PHP使用OR运算符检查多个值的值

我有一个文件名($fname),然后我需要将$pClass分配给文件类型,后面加上“ – ”.目前我总是得到文本 – 无论它是什么文件类型.

//This gets the extention for the file and assigns the class to the icon <i>
$pieces = explode('.', $fname);
$ext = array_pop($pieces);

if($ext == (('txt')||('rtf')||('log')||('docx'))){
  $pClass = 'text-';
}
else if($ext == (('zip')||('sitx')||('7z')||('rar')||('gz'))){
  $pClass = 'archive-';
}
else if($ext == (('PHP')||('css')||('html')||('c')||('cs')||('java')||('js')||('xml')||('htm')||('asp'))){
  $pClass = 'code-';
}
else if($ext == (('png')||('bmp')||('dds')||('gif')||('jpg')||('psd')||('pspimage')||('tga')||('svg'))){
  $pClass = 'image-';
}
else {
  $pClass = '';
}

为什么带有OR运算符的if语句不起作用?

解决方法:

logical ||(OR) operator无法正常工作. ||运算符始终计算为布尔值TRUE或FALSE.因此,在您的示例中,您的字符串将转换为布尔值,然后进行比较.

如果声明:

if($ext == ('txt' || 'rtf'|| 'log' || 'docx'))

归结为:

if($ext == (TRUE || TRUE || TRUE || TRUE))
if($ext == TRUE)

解决此问题并使代码按您的意愿工作,您可以使用不同的方法.

多重比较

解决问题并针对多个值检查值的一种方法是,实际将值与多个值进行比较:

if($ext == "txt" || $ext == "rtf" /* || ... */)

in_array()

另一种方法是使用函数in_array()并检查该值是否等于其中一个数组值:

if(in_array($ext, ["txt", "rtf" /* , ... */], TRUE))

注意:第二个参数用于严格比较

switch()

您还可以使用开关来检查多个值的值,然后让案例落空.

switch($ext){

    case "txt":
    case "rtf":
 /* case ...: */
        $pClass = "text-";
    break;

}

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...