PHP check value against multiple values with OR-operator

前端 未结 3 602
失恋的感觉
失恋的感觉 2020-11-30 13:11

I have a filename($fname) and I need to assign $pClass to the file type with a \"-\" afterwards. Currently I always get text-, no matt

相关标签:
3条回答
  • 2020-11-30 13:31

    The logical ||(OR) operator doesn't work as you expect it to work. The || operator always evaluates to a boolean either TRUE or FALSE. So in your example your strings get converted into booleans and then compared.

    If statement:

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

    Comes down to:

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

    To solve this problem and get the code to work as you want it to you can use different methods.

    Multiple comparison

    One way to solve the problem and check your values against multiple values is, to actually compare the value against multiple values:

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

    in_array()

    Another way is to use the function in_array() and check if the value is equal to one of the array values:

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

    Note: Second parameter is for strict comparison

    switch()

    You could also use switch to check your value against multiple values and just let the case fall through.

    switch($ext){
    
        case "txt":
        case "rtf":
     /* case ...: */
            $pClass = "text-";
        break;
    
    }
    
    0 讨论(0)
  • 2020-11-30 13:49

    You can use in_array() to compare a value to multiple strings:

    if(in_array($ext, array('txt','rtf','log','docx')){
        // Value is found.
    }
    
    0 讨论(0)
  • 2020-11-30 13:54

    I would simply change it to something like this:

    //This gets the extention for the file and assigns the class to the icon <i>
    $pieces = explode('.', $fname);
    $ext = array_pop($pieces);
    if(in_array($ext,array('txt','rtf','log','docx'))){
        $pClass = 'text-';
    }elseif(in_array($ext,array('zip','sitx','7z','rar','gz'))){
        $pClass = 'archive-';
    }elseif(in_array($ext,array('php','css','html','c','cs','java','js','xml','htm','asp'))) {
        $pClass = 'code-';
    }elseif(in_array($ext,array('png','bmp','dds','gif','jpg','psd','pspimage','tga','svg'))){
        $pClass = 'image-';
    }else {
        $pClass = '';
    }
    
    0 讨论(0)
提交回复
热议问题