2011-12-21 110 views
1

這段代碼是我前面寫的。它檢查外部服務器的圖像,如果存在,它將在列表中回顯圖像。我有它最多13個記錄來檢查。我認爲一個數組在這裏最好,但不知道它們是如何工作的。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 2011-12-21 12:14:06

+3

...或['file_exists()'](http://php.net/manual/en/function.file-exists.php)? – 2011-12-21 12:20:24

+0

嘿,你真的認爲重新排序這段代碼會讓它更快嗎?! – 2011-12-21 12:28:11

回答

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 2011-12-21 12:24:31

+0

感謝您指出這一點,現在編輯 – matino 2011-12-21 12:38:22

+1

is_readable()可能比file_exists()更合適 – symcbean 2011-12-21 13:23:49

2

使用foreach循環並不能使它更快,但將使它看起來更乾淨。

您的設計是錯誤的,您不應該在每次加載頁面時檢查是否存在資產。使腳本生成HTML並加載該HTML,而不是每次連接到CDN。

您現在將兩倍的負載放在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 2011-12-21 12:19:14

+0

@TheBlackBenzKid我假設你的問題中的代碼每次在沒有任何緩存的情況下執行一個新的請求時被加載。建議:生成一次包含的HTML並將其放入ech頁面。 – Lekensteyn 2011-12-21 12:21:46

-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。對於很多resae。

起初,你使用@是因爲你想要對此有任何疑問,如果你有警告說你正在擰,並且php正試圖爲你改變它。 Taht的工作是清潔代碼。 但更重要的是,fopen根據打開的文件創建一個資源。然後在這個頁面中創建14個資源!而且他們會在頁面末尾銷燬,因爲你永遠不會關閉它。

有一個php函數是:file_exitsts。 Taht是你的理想之選:

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

雖然你可以讓這段代碼更清潔,但不能讓它更快。 從外部服務器檢查圖像本身是一個可怕的想法,它總是緩慢。僅僅因爲它是外部服務器。

我想知道是否有任何理由檢查每個圖像的存在。他們變化如此之快嗎?