使用函数减少重写代码但是半显着地改变输出

时间:2012-09-06 02:47:08

标签: php

好吧,我有一个函数可以绘制链接,就像网页上的标签一样。基本上,我有一系列链接可用作标签,所有这些性质:

$aTabs[] = array("Mode" => "something", "Title" => "Something Else");

添加完所有标签后,我想使用此功能进行打印:

function drawTabs($aTabs, $sFilename) {
global $iMode;

foreach ($aTabs as $aTab) {
    $sClass = "Tab";
    if ($iMode == $aTab["Mode"]) {
        $sClass .= " CurTab";
    }
    echo "<a class=\"{$sClass}\" href=\"{$sFilename}?Mode={$aTab["Mode"]}\">{$aTab["Title"]}</a>\n";
}

}

所以这看起来一切都很精致和花花公子。它运作得很好。

我还想在网站的另一部分使用它,它使用URL重写使事情看起来更整洁。在网站的该部分,输出需要

echo "<a class=\"{$sClass}\" href=\"{$sFilename}/{$aTab["Mode"]}/\">{$aTab["Title"]}</a>\n";

我正在考虑添加一个字符串替换,可以执行以下操作:

str_replace("[mode]", $aTab["Mode"], $sFilename);

这样我就可以打电话了

drawTabs($aTabs, "/some/place/on/my/site/[mode]/");

并且最有可能添加一个条件,这样如果$ sFilename中没有'[mode]',它只会使用'?Mode = $ aTab [“Mode”]'将它添加到最后。

我的问题是,我的逻辑是否正确,还是有更简单的方法可以做到这一点?

1 个答案:

答案 0 :(得分:1)

解决方案可能是这样的

function drawTabs($aTabs, $sFilename, $sFormat = null) {
    global $iMode;

    $sFormat = $sFormat ?: "<a class=\"[class]\" href=\"[fileName]?Mode=[mode]\">[title]</a>\n";

    foreach ($aTabs as $aTab) {
        $sClass = "Tab";
        if ($iMode == $aTab["Mode"]) {
            $sClass .= " CurTab";
        }

        $replacements = array(
            '[class]' => $sClass,
            '[fileName]' => $sFilename,
            '[mode]' => $aTab["Mode"],
            '[title]' => $aTab['Title'],
            );
            echo strtr($sFormat, $replacements);

    }
}

然后使用它

$sFormat = "<a class=\"[class]\" href=\"[fileName]/[mode]/\">[title]</a>\n";

drawTabs($aTabs, $sFilename, $sFormat);