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 に答える