Прежде всего вы можете сделать языковое значение параметром URL, используя простой заполнитель, такой как %s
или %lang%
:
$url = 'http://example.com/site/?lang=%lang%';
$newurl = str_replace('%lang%', $lang, $url);
Вы можете сделать это или инкапсулировать логику, чтобы заменить какой-либо параметр запроса URI на собственную функцию и использовать встроенные функции вместо этого, вместо этого сворачивая свои собственные (например, parse_url
, parse_str
, ...).
Аналогично тому, что относится и к вашему выводу, вы можете использовать существующий индекс (я думаю, на основе 0) и, следовательно, оптимизировать целое:
public function generateLangs($url, $currentLanguage, $languages)
{
$urlPattern = preg_replace('~^(.*[?&]lang=)([a-z]+)((?:&.*)?)$~', '\1%lang%\3', $url, 1, $count);
$count || $urlPattern .= '?lang=%lang%';
unset($count);
foreach ($languages as $i => $lang)
{
$newUrl = str_replace('%lang%', $lang, $urlPattern);
printf("%s<a href=\"%s\"%s>%s</a>\n", $i ? ' | ' : '', $newUrl,
$curlang === $lang ? ' class="active"' : '', $lang);
}
}
Ключевым моментом более или менее является то, что вы группируете код рядом друг с другом, который принадлежит друг другу. Это более или менее автоматически уменьшает сложность кода и, следовательно, часто его длину. Но позаботьтесь о том, чтобы длина не была столь важной, более важно, чтобы вы могли прочитать ее правильно.