Создание элегантных операторов if - PullRequest
1 голос
/ 18 февраля 2012

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

Ответы [ 4 ]

0 голосов
/ 18 февраля 2012

Я не уверен, насколько элегантнее это будет, но вы могли бы использовать такую ​​функцию, как:

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

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

0 голосов
/ 18 февраля 2012

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

foreach($sn_array as $link => $text):
    if(!empty($link) && !empty($text)) echo ...;
endforeach;
0 голосов
/ 18 февраля 2012

Вы должны сделать это циклом, где значения находятся в массиве.тогда только один оператор if и один оператор echo необходимы для выполнения одной и той же задачи.

$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 голосов
/ 18 февраля 2012

Возможно цикл 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>');
    }
}
...