2012-02-17 2 views
1

У меня есть следующий набор 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

ответ

0

Почему не перебирать и использовать массивы?

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

Отлично. Работает отлично. Я должен был подумать об этом, чтобы начать. – Ryan

+0

@Ryan. Это приведет к нежелательным столкновениям. – Alexander

+0

@ Александр Почему? Не смешно, хотелось бы лучше понять. – Ryan

0

Возможно, цикл с переменными переменными:

<?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

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>'); 
} 

вам не нужно даже если заявление, потому что, если значения не существует, вы просто не добавить их в массив $ 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.... 

Если у вас есть это более чем на месте или что-то подобное функция захода на посадку может помочь.