PHP Foreach根据类更改链接文本

时间:2013-12-19 09:09:41

标签: php foreach

我有foreach语句,基本上创建了一个链接。每个链接都有自己独特的类。我想要做的是根据链接的类别创建特定的链接文本。我知道我可以用JavaScript做到这一点,但我更愿意通过PHP来实现。

我尝试了两种不同的解决方案。第一个如下:

<?php
    foreach($plugins as $link):
        $linkParams = '';
        if(isset($link['params'])){
            foreach($link['params'] as $k => $v){
                $linkParams .= ' ' . $k . '="' . $v . '"';
            }
        }
        ?>

        <?php
        $linkClass      = $link['class'];
        ?>
        <a class="btn btn-block btn-<?php echo $link['class'];?>" rel="nofollow" <?php echo $linkParams;?> href="<?php echo JRoute::_($link['link']);?>"><?php
        if ($linkClass = "facebookslogin"){echo 'Login With Facebook';}
        if ($linkClass = "googleslogin"){echo 'Login With Google';}
        if ($linkClass = "twitterslogin"){echo 'Login With Twitter';}
        if ($linkClass = "linkedinslogin"){echo 'Login With LinkedIn';}
        if ($linkClass = "liveslogin"){echo 'Login With Outlook';} ?></a>
    <?php endforeach; ?>

这种方法的结果是每个链接都有相同的文本:“使用带有OutlookLogin的带有OutlookLogin的带有GoogleLogin的FacebookLogin登录”

我还尝试按照以下代码使用str_replace:

<?php
    foreach($plugins as $link):
        $linkParams = '';
        if(isset($link['params'])){
            foreach($link['params'] as $k => $v){
                $linkParams .= ' ' . $k . '="' . $v . '"';
            }
        }
        ?>

        <?php
        $linkClass      = $link['class'];
        $facebookslogin = str_replace("facebookslogin", "Login With Facebook", $linkClass);
        $googleslogin   = str_replace("googleslogin", "Login With Google", $linkClass);
        $twitterslogin  = str_replace("twitterslogin", "Login With Twitter", $linkClass);
        $linkedinslogin = str_replace("linkedinslogin", "Login With LinkedIn", $linkClass);
        $liveslogin     = str_replace("liveslogin", "Login With Outlook", $linkClass);
        $loginText      = $fbslogin.$googleslogin.$twitterslogin.$linkedinslogin.$liveslogin;
        ?>
        <a class="btn btn-block btn-<?php echo $link['class'];?>" rel="nofollow" <?php echo $linkParams;?> href="<?php echo JRoute::_($link['link']);?>"><?php echo $loginText; ?></a>
    <?php endforeach; ?>

这样做的结果是每个链接都有正确的文本,但它被其他类(不正确的文本)包围。例如,Facebook链接是“使用Facebookfacebooksloginfacebooksloginfacebooksloginfacebookslogin登录”

我很确定这可以做到,但我根本没有PHP知道如何做到这一点。我在谷歌和Stack Overflow上搜索了这个,但我发现问题的一部分没有词汇来知道要搜索什么。任何帮助一如既往地受到赞赏。谢谢。

1 个答案:

答案 0 :(得分:5)

你的第一个例子实际上是正确的,你只需要用双倍替换单个“=”。

if ($linkClass = "facebookslogin"){echo 'Login With Facebook';}

should become

if ($linkClass == "facebookslogin"){echo 'Login With Facebook';}

使用数组的简单方法可以这样工作:

<?php
$linkText = array(
    'facebookslogin' => 'Login with Facebook',
    'googleslogin' => 'Login with Google'
);
?>

<a class="btn btn-block"><?php echo $linkText[$linkClass]; ?></a>