Php 重写if-else序列的更好方法

Php 重写if-else序列的更好方法,php,Php,我想问一下,编写这一系列的if-else语句更好的方法是什么: $dir = base_url()."assets/produits/"; $img_src = $dir."none.png"; if (!empty($row->nShape)) { $nom = $row->nShape; if (file_exists($dir.$nom.".JPEG")) { $img_src = $dir.$nom.".JPEG"; } els

我想问一下,编写这一系列的
if-else
语句更好的方法是什么:

$dir = base_url()."assets/produits/";
  $img_src = $dir."none.png";

  if (!empty($row->nShape)) {
      $nom = $row->nShape;

  if (file_exists($dir.$nom.".JPEG")) {
      $img_src = $dir.$nom.".JPEG";
  }
  else
  if (file_exists($dir.$nom.".jpg")) {
      $img_src = $dir.$nom.".jpg";
  }
  else
  if (file_exists($dir.$nom.".jpeg")) {
      $img_src = $dir.$nom.".jpeg";
  }
  }
全MVC模式 实施后:回答

查看文件

模型文件
您可以使用取自的函数,该函数忽略大小写:

function fileExists($fileName, $caseSensitive = true) {

    if(file_exists($fileName)) {
        return $fileName;
    }
    if($caseSensitive) return false;

    // Handle case insensitive requests            
    $directoryName = dirname($fileName);
    $fileArray = glob($directoryName . '/*', GLOB_NOSORT);
    $fileNameLowerCase = strtolower($fileName);
    foreach($fileArray as $file) {
        if(strtolower($file) == $fileNameLowerCase) {
            return $file;
        }
    }
    return false;
}
现在您可以迭代:

$allowedExtensions = ["jpeg","jpg"];

foreach($allowedExtensions as $ext){
     if(fileExists("youfFileName.$ext"),false){
         //do your code..
     }
}

您可能可以使用
foreach
循环合并三个
if
语句:

dir = base_url()."assets/produits/";
    $img_src = $dir."none.png";

    if (!empty($row->nShape)) {
            $nom = $row->nShape;

    $type = array(".JPEG", ".jpg", ".jpeg");

    foreach ($type as $ext) {
        if (file_exists($dir.$nom.$ext)) {
            $img_src = $dir.$nom.$ext;
            break;
        }
    }
}

通过向数组添加扩展名,可以显著减少冗余的if语句。

如果无法标准化文件的保存方式,我可能会
glob()
目录,并对结果数组进行不区分大小写的匹配。它显示none占位符,并且图像文件existsAdd
echo$img\u src
$img\u src=$dir.$nom.$ext之后并查看是否有任何输出。它显示了
none.png
占位符我已经添加了MVC模式检查它。我已经添加了完整的代码,您可以检查我在添加我提到的回显行时所做的操作(介于
$img_src=$dir.$nom.$ext;
break
之间).但我可以在哪里确定指定的目录?只需发送完整路径“full/path/to/file/file.jpg”;fileExists知道如何使用dirname($fileName)在文件的文件夹内搜索;但是我不能在foreach循环中使用函数,请在问题中检查上面的问题为什么不能?我看不出
无法重新声明fileExists()的原因(以前在C:\xampp\htdocs\dedax\u new\application\views\produits.php:9中声明)
function fileExists($fileName, $caseSensitive = true) {

    if(file_exists($fileName)) {
        return $fileName;
    }
    if($caseSensitive) return false;

    // Handle case insensitive requests            
    $directoryName = dirname($fileName);
    $fileArray = glob($directoryName . '/*', GLOB_NOSORT);
    $fileNameLowerCase = strtolower($fileName);
    foreach($fileArray as $file) {
        if(strtolower($file) == $fileNameLowerCase) {
            return $file;
        }
    }
    return false;
}
$allowedExtensions = ["jpeg","jpg"];

foreach($allowedExtensions as $ext){
     if(fileExists("youfFileName.$ext"),false){
         //do your code..
     }
}
dir = base_url()."assets/produits/";
    $img_src = $dir."none.png";

    if (!empty($row->nShape)) {
            $nom = $row->nShape;

    $type = array(".JPEG", ".jpg", ".jpeg");

    foreach ($type as $ext) {
        if (file_exists($dir.$nom.$ext)) {
            $img_src = $dir.$nom.$ext;
            break;
        }
    }
}