简化此PHP代码段

Dea*_*ott 0 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>';
}
Run Code Online (Sandbox Code Playgroud)

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

有没有办法可以将所有foreach东西组合成一个什么东西?

dec*_*eze 6

  1. 确定共性:

    echo '<li class="twitter"><a href="'.$twt.'">Twitter</a></li>';
    ^^^^^^^^^^^^^^^^^       ^^^^^^^^^^^^^^^^^^^^^       ^^^^^^^^^^^
    
    Run Code Online (Sandbox Code Playgroud)
  2. 识别不同的部分:

    echo '<li class="twitter"><a href="'.$twt.'">Twitter</a></li>';
                     ^^^^^^^                     ^^^^^^^
    
    Run Code Online (Sandbox Code Playgroud)
  3. 确定依赖关系和关系:

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

统一:

$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));
    }
}
Run Code Online (Sandbox Code Playgroud)

  • +1帮助OP为自己解决问题. (2认同)