2012-02-17 194 views
1

我有下面的一組if聲明:創建優雅的if語句

<?php 

if (!empty($sn1link) && !empty($sn1)) { 
    echo('<a href="'.$sn1link.'" target="_blank"><button class="lbutton-content">'.$sn1.'</button></a>'); 
} 

if (!empty($sn2link) && !empty($sn2)) { 
    echo('<a href="'.$sn2link.'" target="_blank"><button class="lbutton-content">'.$sn2.'</button></a>'); 
} 

if (!empty($sn3link) && !empty($sn3)) { 
    echo('<a href="'.$sn3link.'" target="_blank"><button class="lbutton-content">'.$sn3.'</button></a>'); 
} 

if (!empty($sn4link) && !empty($sn4)) { 
    echo('<a href="'.$sn4link.'" target="_blank"><button class="lbutton-content">'.$sn4.'</button></a>'); 
} 

if (!empty($sn5link) && !empty($sn5)) { 
    echo('<a href="'.$sn5link.'" target="_blank"><button class="lbutton-content">'.$sn5.'</button></a>'); 
?> 

我想結合這if語句更優雅的方式。我試過else if,但顯然這隻會顯示第一個if聲明,返回TRUE而我想每隔TRUE聲明返回。我不認爲switch也可以。

+0

http://codereview.stackexchange.com/ – j08691 2012-02-17 20:26:14

回答

0

爲什麼不迭代,並使用數組?

foreach($sn_array as $link => $text): 
    if(!empty($link) && !empty($text)) echo ...; 
endforeach; 
+0

太好了。完美的作品。我應該首先想到這一點。 – Ryan 2012-02-17 20:33:24

+0

@Ryan,這會產生不希望的碰撞。 – Alexander 2012-02-17 20:49:45

+0

@Alexander爲什麼會這樣?這裏不好笑,只是想更好地理解。 – Ryan 2012-02-17 21:44:23

0

也許一個for循環具有可變的變量:

<?php 

for ($i = 1; $i <= 5; $i++) { 

    $link = 'sn'.$i.'link'; 
    $button = 'sn'.$i; 

    if (!empty($$link) && !empty($$button)) { 
     echo('<a href="'.$$link.'" target="_blank"><button class="lbutton-content">'.$$button.'</button></a>'); 
    } 
} 
+1

雖然這會起作用,但使用變量變量通常被認爲是不好的做法。 – Kenaniah 2012-02-17 20:25:55

0

你應該讓它成爲一個循環,其中的值在一個數組中。那麼只有一個,如果需要一個回聲聲明來完成同樣的事情。

$snList = array($sn1 => $sn1Link, $sn2 => $sn2Link, $sn3 => $sn3Link); 

foreach ($snList as $name => $link) { 
    echo('<a href="'.$link.'" target="_blank"><button class="lbutton-content">'.$name.'</button></a>'); 
} 

你甚至不需要if語句,因爲如果不存在的值,你根本不把它們擺在首位添加到$ snList陣列。

$snList = array(); 
$snList[$key] = $value; 
0

我不知道如何更優雅,這將是,但你可以使用這樣的功能:如果你有這個

function getButtonContent($link, $content) { 

     if (!empty($link) && !empty($content)) { 
      echo('<a href="'.$link.'" target="_blank"><button class="lbutton-content">'.$content.'</button></a>'); 
     } 
    } 

    getButtonContent($sn1link, $sn1); 
    getButtonContent($sn2link, $sn2); 
    getButtonContent($sn3link, $sn3); 

etc.... 

更不是地方或有類似功能的方法的東西可能有幫助。