简化此PHP代码段

时间:2013-10-09 09:36:34

标签: php foreach

我知道这是一个基于WordPress的问题,但我认为答案肯定是更独立的PHP。

在我为客户做的几乎每个网站上,我都要添加一些社交媒体链接,这些链接来自选项页面。我目前使用这种片段;

$twt = of_get_option('twitter');
$fcb = of_get_option('facebook');
$ins = of_get_option('instagram');
if ($twt) {
    echo '<li class="twitter"><a href="'.$twt.'">Twitter</a></li>';
}
if ($fcb) {
    echo '<li class="facebook"><a href="'.$fcb.'">Facebook</a></li>';
}
if ($ins) {
    echo '<li class="instagram"><a href="'.$ins.'">Instagram</a></li>';
}

如果只有几个链接,这很好,但最近我的一个主要客户似乎将阳光下的每个社交媒体链接包含在他们的设计中,所以这样做可能有点笨重。

有没有办法可以将所有内容组合成foreach或其他内容?

4 个答案:

答案 0 :(得分:6)

  1. 确定共性:

    echo '<li class="twitter"><a href="'.$twt.'">Twitter</a></li>';
    ^^^^^^^^^^^^^^^^^       ^^^^^^^^^^^^^^^^^^^^^       ^^^^^^^^^^^
    
  2. 识别不同的部分:

    echo '<li class="twitter"><a href="'.$twt.'">Twitter</a></li>';
                     ^^^^^^^                     ^^^^^^^
    
  3. 识别依赖关系和关系:

    $twt取决于of_get_option(...),其参数与2中的twitter相同。
    服务的类和名称相互依赖。他们的关系显然是这个名字只是该类的第一个字母大写的版本,但我不会依赖它。

  4. 统一:

    $services = array(
        'twitter'  => 'Twitter',
        'facebook' => 'Facebook'
        ...
    );
    
    foreach ($services as $service => $name) {
        if ($url = of_get_option($service)) {
            printf('<li class="%s"><a href="%s">%s</a></li>', $service, $url, $name);
            // or, if you can't be sure that the variables are safe for HTML interpolation:
            // printf('<li class="%s"><a href="%s">%s</a></li>', htmlspecialchars($service), htmlspecialchars($url), htmlspecialchars($name));
        }
    }
    

答案 1 :(得分:4)

不知道你的意思是否正确,但请查看以下代码:

foreach(array('twitter', 'facebook', 'instagram') as $source)
    {
    $data = of_get_option($source);
    if($data)
        {
        echo '<li class="'.$source.'"><a href="'.$data.'">'.ucfirst($source).'</a></li>';
        }
    }

答案 2 :(得分:2)

您可以尝试这样的事情:

$social_media = array(
    array( 'name' => 'Twitter', 'href' => of_get_option('twitter') ),
    array( 'name' => 'Facebook', 'href' => of_get_option('facebook') ),
    array( 'name' => 'Instagram', 'href' => of_get_option('instagram') )
);

foreach( $social_media as $s )
    echo '<li class="' . strtolower( $s["name"] ) . '"><a href="' . $s["href"] . '">' . $s["name"] . '</a></li>';

然后只需将新的社交媒体网站添加到$social_media数组中。

答案 3 :(得分:0)

尝试以下方法:

$social = array('Twitter', 'Facebook', 'Instagram');

for($i=0;$i<length($social); ++$i) {
    $twt = of_get_option($social[$i]);
    if ($twt) {
        echo '<li class="' . strtolower($social[$i]) . '"><a href="' . $twt . '">' . $social[$i].     '</a></li>';
    }
}

您可以通过将其添加到阵列来添加其他社交网络。这是一个紧凑的解决方案。