我的语言栏生成功能看起来像这样。它有效,但是,感觉就像,它不是最佳方式,而且这个功能有一堆可以删除的额外线条。你怎么缩小它?
public function generateLangs($url, $curlang, $langs) {
$i = 0;
$countlng = count($langs);
foreach ($langs as $lang) {
if (strstr($url, '?')) {
if (strstr($url, 'lang')) {
$newurl = preg_replace('&lang=(\w+)&', 'lang=' . $lang, $url);
} else {
$newurl = $url . '&lang=' . $lang;
}
}
else {
$newurl = $url . '?lang=' . $lang;
}
$result = '<a ';
if ($curlang == $lang) {
$result .= 'class="active" ';
}
$result .= 'href="' . $newurl . '">' . $lang . '</a>' . "\n";
if ($i != $countlng - 1)
$result .= ' | ';
echo $result;
$i++;
}
}
答案 0 :(得分:0)
首先,您可以使用简单占位符(例如%s
或%lang%
)将语言值设为网址的参数:
$url = 'http://example.com/site/?lang=%lang%';
$newurl = str_replace('%lang%', $lang, $url);
你可以这样做,或者你应该封装逻辑以将URI的一些查询参数替换为它自己的函数,并在那里使用内置函数而不是滚动你自己(例如parse_url
,{{ 1}},...)。
与此类似,同样适用于您的输出,您可以使用现有索引(我猜是0)并因此简化整体:
parse_str
关键点或多或少是您将彼此相邻的代码组合在一起。这或多或少会自动降低代码的复杂性,因此通常也会降低代码的长度。但要注意长度不是那么重要,更重要的是你可以干净利落地阅读它。