5

我有一个脚本。它接收一个名为 $node 的变量,它是一个字符串;现在,让我们假设变量值为“NODEVALUE”。当脚本被调用时,它接受变量 $node,并试图找到一个名为 NODEVALUE.png 的图像。如果找不到该图像,则检查 NODEVALUE.jpg,如果找不到,则查找 NODEVALUE.gif ......毕竟,它仍然找不到,它返回 RANDOM.png。

现在我正在做这个脚本如下:

if (file_exists($img = $node.".png")) {  }
else if (file_exists($img = $node.".jpg")) {  }
else if (file_exists($img = $node.".gif")) {  }
else
{
    $img = 'RANDOM.png';
}

必须有比这更好的方法......有人有什么想法吗?

4

4 回答 4

3
$list = array_filter(array("$node.png", "$node.jpg", "$node.gif"), 'file_exists');
if (!$img = array_shift($list)) {
    $img = 'RANDOM.png';
}

备择方案 :

$list = scandir(".");
$list = preg_grep("#".preg_quote($node,'#')."\.(jpg|png|gif)$#", $list);

这将返回以 $node 开头并带有 .jpg、.png 或 .gif 后缀的文件名列表。

如果目录包含许多条目,那么首先使用 glob() 可能会更快:

$list = glob("$node.*"); // take care to escape $node here
$list = preg_grep("#".preg_quote($node,'#')."\.(jpg|png|gif)$#");

preg_grep()也可以替换为

$list = array_intersect($list, array("$node.png", "$node.jpg", "$node.gif"));

或使用循环:

$img = null;
foreach(array('png','jpg','gif') as $ext) {
    if (!file_exists("$node.$ext")) continue;
    $img = "$node.$ext"; break;
}
$img = $img ? $img : "RANDOM.png";
于 2011-01-22T20:10:39.483 回答
2

最紧凑(因此不推荐)的形式是:

if (array_sum(array_map("file_exists", array($fn1, $fn2, $fn3)))) {

它也可以适应使用 array_search 返回找到的文件名:

array_search(1, array_map("file_exists", array($fn1=>$fn1, $fn2=>$fn2)))

难读。请注意,它还需要像array("$node.png"=>"$node.png", "$node.gif"=>"$node.gif", ...). 所以它不会那么短。

于 2011-01-22T20:10:59.953 回答
2
$n_folder="images/nodes/";
$u_folder="images/users/";
     $extensions=array(".png",".jpg",".gif");

foreach ($extensions as $ext)
{
    if (file_exists($n_folder.$node.$ext))
    {
     $img=$n_folder.$node.$ext;
     break;
    }
    elseif (file_exists($u_folder.$node.$ext))
    {
      $img=$u_folder.$node.$ext;
     break;
    }
}

if (!$img)
{
    random image generator script...
}
于 2011-01-22T20:15:54.000 回答
1

好的......这就是我最终确定的:

$searches = array(
    $folder . "nodes/" . $node . ".png",
    $folder . "nodes/" . $node . ".jpg",
    $folder . "nodes/" . $node . ".gif",
    $folder . "users/" . $user . ".png",
    $folder . "users/" . $user . ".jpg",
    $folder . "users/" . $user . ".gif"
);

foreach ($searches AS $search)
{
    if (file_exists($search))
    {
        $img = $search;
        break;
    }
}

if (!$img)
{
    random image generator script...
}
于 2011-01-22T20:55:20.520 回答