Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 创建优雅的if语句_Php_If Statement_Switch Statement - Fatal编程技术网

Php 创建优雅的if语句

Php 创建优雅的if语句,php,if-statement,switch-statement,Php,If Statement,Switch Statement,我有以下一组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)) {

我有以下一组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,但显然这只会显示第一个返回TRUE的if语句,而我希望返回每个TRUE语句。我认为开关也不起作用。

可能是带有变量的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>');
    }
}

为什么不迭代并使用数组呢

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

您应该使其成为一个循环,其中值位于数组中。然后只需要一个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>');
}

我不确定这会有多优雅,但您可以使用如下函数:

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

如果你有很多这样的方法,或者有类似的方法,函数方法可能会有所帮助。

虽然这样做可行,但通常认为使用变量是不好的做法。太好了。工作完美。我应该从这个开始考虑。@Ryan,这会产生意外碰撞。@Alexander为什么会这样?这里不好笑,只是想更好地理解。@Ryan,空的或相同的$link字符串,即,无疑会导致相同的键替换它们自己,只剩下最后添加的一个键。如果您需要保留原始元素,那么这是一个大问题,否则就可以满足您的需要。@Alexander谢谢您的解释。在99%的情况下,字符串不会为空,因此我认为这应该可以正常工作。谢谢你的澄清。
    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....