2011-12-21 11 views
1

このコードは私が以前に書いたものです。外部サーバーにイメージがあるかどうかをチェックし、存在する場合はイメージをリストにエコーします。私はチェックするために13レコードまで持っています。私は配列がここで一番良いと思ったけど、どうやって動いているか分からなかった。 foreachループを使用してPHP - このIFとELSEステートメントをよりクリーンで速く書くにはどうすればいいですか?

$a1="".$cdnurl."assets/".$pid."/1/medium.jpg"; 
       $a2="".$cdnurl."assets/".$pid."/2/medium.jpg"; 
       $a3="".$cdnurl."assets/".$pid."/3/medium.jpg"; 
       $a4="".$cdnurl."assets/".$pid."/4/medium.jpg"; 
       $a5="".$cdnurl."assets/".$pid."/5/medium.jpg"; 
       $a6="".$cdnurl."assets/".$pid."/6/medium.jpg"; 
       $a7="".$cdnurl."assets/".$pid."/7/medium.jpg"; 
       $a8="".$cdnurl."assets/".$pid."/8/medium.jpg"; 
       $a9="".$cdnurl."assets/".$pid."/9/medium.jpg"; 
       $a10="".$cdnurl."assets/".$pid."/10/medium.jpg"; 
       $a11="".$cdnurl."assets/".$pid."/11/medium.jpg"; 
       $a12="".$cdnurl."assets/".$pid."/12/medium.jpg"; 
       $a13="".$cdnurl."assets/".$pid."/13/medium.jpg"; 
       if(@fopen($a1,"r")){ 
        echo '<li class="royalSlide"><img src="'.$a1.'" alt="" /></li>'; 
      } 
if(@fopen($a2,"r")){echo '<li class="royalSlide"><img src="'.$a2.'" alt="" /></li>'; 
} 
if(@fopen($a3,"r")){echo '<li class="royalSlide"><img src="'.$a3.'" alt="" /></li>'; 
} 
if(@fopen($a4,"r")){echo '<li class="royalSlide"><img src="'.$a4.'" alt="" /></li>'; 
} 
if(@fopen($a5,"r")){echo '<li class="royalSlide"><img src="'.$a5.'" alt="" /></li>'; 
} 
if(@fopen($a6,"r")){echo '<li class="royalSlide"><img src="'.$a6.'" alt="" /></li>'; 
} 
if(@fopen($a7,"r")){echo '<li class="royalSlide"><img src="'.$a7.'" alt="" /></li>'; 
} 
if(@fopen($a8,"r")){echo '<li class="royalSlide"><img src="'.$a8.'" alt="" /></li>'; 
} 
if(@fopen($a9,"r")){echo '<li class="royalSlide"><img src="'.$a9.'" alt="" /></li>'; 
} 
if(@fopen($a10,"r")){echo '<li class="royalSlide"><img src="'.$a10.'" alt="" /></li>'; 
} 
if(@fopen($a11,"r")){echo '<li class="royalSlide"><img src="'.$a11.'" alt="" /></li>'; 
} 
if(@fopen($a12,"r")){echo '<li class="royalSlide"><img src="'.$a12.'" alt="" /></li>'; 
} 
+9

あなたはループについて聞いたことがありますか? – Nazariy

+3

...または['file_exists()']](http://php.net/manual/en/function.file-exists.php)? –

+0

ねえ、あなたは本当にこのコードの並べ替えが速くなると思っていますか? –

答えて

5
for ($i = 1; $i < 14; $i++) 
{ 
    $elem = $cdnurl . "assets/" . $pid . "/$i/medium.jpg"; 
    if(is_readable($elem)) 
    { 
     echo '<li class="royalSlide"><img src="'.$elem.'" alt="" /></li>'; 
    } 
} 
+1

しかし、ファイルの存在をテストするために、この存在をテストする関数があります。file_exists()。ファイルを開こうとする必要はありません... – macjohn

+0

これを指摘してくれてありがとうございました – matino

+1

is_readable()はおそらくfile_exists()よりも適切でしょう – symcbean

2

それは速くなりませんが、それがきれいに見えるようになります。

あなたの設計が間違っている、あなたは資産ごとにページが読み込まの存在を確認する必要性を持つべきではありません。毎回CDNに接続するのではなく、HTMLを生成してそのHTMLを読み込むようにします。

あなたは今CDN上の二倍の負荷を入れています。特定の<li>要素を非表示にする必要がある場合は、イメージが読み込まれなかった場合にJavascriptを使用して要素を削除します。

"...数..." のようなURLを前提としていたコード:

<?php 
foreach (range(0, 13) as $number) { 
    $url = $cdnurl . "assets/$pid/$number/medium.jpg"; 
    echo '<li class="royalSlide"> 
     <img src="' . $url . '" onerror="parentNode.parentNode.removeChild(parentNode)" alt="" /> 
    </li>'; 
} 
?> 

このコードは、あなたの質問からのコードの拡張機能です:

<?php 
foreach (range(0, 13) as $number) { 
    $url = $cdnurl . "assets/$pid/$number/medium.jpg"; 
    // skip URLs which cannot be found 
    if (!file_exists($url)) continue; 

    echo '<li class="royalSlide"> 
     <img src="' . $url . '" alt="" /> 
    </li>'; 
} 
?> 
+0

This意味を成さない。あなたはどんな解決策を提案していますか? – TheBlackBenzKid

+0

@ TheBlackBenzKid私はあなたの質問のコードは、新しいリクエストが何らかのキャッシュなしで実行されるたびに読み込まれると仮定しました。提案:HTMLを生成して一度組み込み、それをechページに入れます。 – Lekensteyn

-1
for($i=1;i<=13;i++){ 
    $item =$cdnurl.'assets/'.$pid.'/'.$i.'/'.medium.jpg; 
    echo (@fopen($item,'r')?'<li class="royalSlide"><img src="'.$item.'" alt="" /></li>':''); 
} 

ファイルが実際にはいリストを使用することができます数

1

によって命名されていると仮定し、トリックを行うだろう。良いアイデアは、のためにそれを作成することです

$a = array(); 
for($i = 0; î < 14; ++$i) 
{ 
    $a[] = $cdnurl."assets/".$pid."/".$i."/medium.jpg"; 
} 

その後、あなたはそれを読むことができます:このインサイド

foreach($a as $tmpA) 
{ 
... 
} 

をあなたは、これはあなたが持っているイメージであるかどうかをテストする必要がありますサーバーを開き、それを表示します。 しかし、あなたはfopenを使うべきではありません。再会のために。あなたD'ONTは、あなたがそれはあなたが固く絞っをやっているのです警告している場合は、この上の任意のWrningを持ちたいので

は、最初にあなたは、@を使用して、PHPはあなたのためにそれを変更しようとしています。タートはあなたの仕事をきちんとしたコードにする必要があります。 さらに重要なことに、fopenは開いているファイルに基づいてressourceを作成します。次に、このページでは14のリソースを作成します。そしてあなたはそれを決して閉じないので、ページの最後に破壊されます。

であるPHPの関数があります:file_exitsts。 Tahtはあなたのための正しいものです:

foreach($a as $tmpA) 
{ 
    if (file_exists($filename)) 
    { 
     echo '<li class="royalSlide"><img src="'.$tmpA.'" alt="" /></li>'; 
    } 
} 
0

このコードをよりクリーンにすることはできますが、それをより速くすることはできません。 外部のサーバーからイメージをチェックすることはひどい考えであり、常に遅くなります。ちょうどそれだから外部サーバ。

すべての画像存在をチェックするために何らかの理由がある場合、私は疑問に思って。彼らは変化が速いのですか?

関連する問題