我有一个filename($fname),然后需要$pClass用“-” 分配给文件类型。目前text-,无论文件类型如何,我总是会得到。
$fname
$pClass
text-
//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语句不起作用?
该逻辑 ||(OR)运算符如您预期的工作不工作。该||运营商始终计算结果为布尔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多个值来检查您的值,然后通过大小写检查。
switch
switch($ext){ case "txt": case "rtf": /* case ...: */ $pClass = "text-"; break; }