我有一个脚本。它收到一个名为$ 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';
}
必须有比这更好的方法......任何人都有任何想法吗?
答案 0 :(得分: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";
答案 1 :(得分: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", ...)
这样的地图。所以它不会那么短。
答案 2 :(得分: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...
}
答案 3 :(得分: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...
}