代码之家  ›  专栏  ›  技术社区  ›  Rosamunda

在内部使用php strpos()函数,如果循环不能按预期工作?

  •  -1
  • Rosamunda  · 技术社区  · 5 年前

    我有一个文本字符串,它是一个文件名,我只想在文件名不包含图像扩展名的情况下显示它。

    这是字符串结构:

    this-file-1.jpg
    other_file.pdf
    and-yet_another--file.zip
    and-another-one.png
    

    我试过了:

    if ( strpos($value, 'jpg') === FALSE) {
        echo $mostrarArchivos;
    }
    

    它确实有效,但当我尝试它时,它不会:

    if ( strpos($value, 'jpg') === FALSE ||
        strpos($value, 'jpeg') === FALSE ||
        strpos($value, 'png') === FALSE ||
        strpos($value, 'gif') === FALSE
    ) {
        echo $mostrarArchivos;
    }
    

    从某种意义上说,它确实显示了带有文件名的字符串,即使该字符串表示 whatever.jpg

    我确实认识到这应该以不同的方式来做,所以任何建议都是不受欢迎的。

    1 回复  |  直到 5 年前
        1
  •  2
  •   RiggsFolly    5 年前

    这似乎是一个更简单、更灵活的解决方案,因为您可以轻松地向 $invalid 随时排列。这还将确保测试的是实际的扩展名,而不是文件名部分中与要忽略的扩展名匹配的字符序列。

    $invalid = ['jpg','gif','png'];
    
    $filename = 'hello_world.png';
    
    if ( ! in_array(pathinfo($filename, PATHINFO_EXTENSION), $invalid) ) {
        echo 'VALID EXTN ' . $filename . PHP_EOL;
    } else {
        echo 'INVALID EXTN '  . $filename . PHP_EOL;
    }