【问题标题】:Creating elegant if statements创建优雅的 if 语句
【发布时间】:2012-02-17 20:14:38
【问题描述】:

我有以下一组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 语句。我认为switch 也行不通。

【问题讨论】:

标签: php if-statement switch-statement


【解决方案1】:

为什么不迭代和使用数组?

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

【讨论】:

  • 太棒了。完美运行。我应该从一开始就想到这一点。
  • @Ryan,这将产生不希望的碰撞。
  • @Alexander 为什么会这样?这里不搞笑,只是想更好地理解。
  • @Ryan,空或相同的$link 字符串(即'')无疑会导致相同的键替换自己,只剩下最后一个添加的键。如果您需要保留原始元素,那么这是一个大问题,否则就可以满足您的需求。
  • @Alexander 谢谢你的解释。在 99% 的情况下,字符串不会为空,所以我认为这应该可以正常工作。不过感谢您的澄清。
【解决方案2】:

也许是一个带有可变变量的 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>');
    }
}

【讨论】:

  • 虽然这样可行,但通常认为使用可变变量是不好的做法。
【解决方案3】:

你应该让它成为一个循环,其中的值在一个数组中。那么只需要一个 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;

【讨论】:

    【解决方案4】:

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

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

    如果你有更多的地方或有类似的东西,功能方法可能会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-10-25
      • 1970-01-01
      • 2020-07-30
      • 2017-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多