Take the 2-minute tour ×
Code Review Stack Exchange is a question and answer site for peer programmer code reviews. It's 100% free, no registration required.

Would it be better to convert the array in the following code to

$langs = array("en", "de", "fr");

and then reusing the values for both $folder and $flag? If so, how then would my foreach (or maybe a while?) loop be written?

<?php
    $langs = array(
        "en/" => "en.png",
        "de/" => "de.png",
        "fr/" => "fr.png"
    );
    $self    = $_SERVER['REQUEST_URI'];
    $pattern = "{^.*/}i";
    $links   = array();
    foreach ($langs as $folder => $flag) {
        $url  = preg_replace($pattern, "$folder", $self);
        $link = "<li><a href=\"../$url\"><img src=\"../img/$flag\"></a></li>";
        array_push($links, $link);
    }
    echo implode($links) . "\n";
?>

I'm trying to "fool proof" the code, by effectively limiting the folder structures and file names that can be used, as I create a basic template of files for quick rolling out of our websites. If you can see any other improvements, that would be much appreciated.

share|improve this question

1 Answer 1

up vote 3 down vote accepted

You can definitely simplify this, as the only part of each element of $langs that changes is the two-letter language code. Something like this would work:

<?php
$langs = array(
    "en",
    "de",
    "fr"
);
$self    = $_SERVER['REQUEST_URI'];
$pattern = "{^.*/}i";
$links   = array();
foreach ($langs as $code) {
    $url  = preg_replace($pattern, "$code/", $self);
    $link = "<li><a href=\"../$url\"><img src=\"../img/$code.png\"></a></li>";
    array_push($links, $link);
}
echo implode($links) . "\n";
?>

You just use a non-associative array and append / or .png where needed; much cleaner.

share|improve this answer
    
Thank you. Once you see it written out, you realise it's so simple yet so effective! –  mpdc Feb 6 '14 at 17:13

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.