2014-02-06 138 views
1

我有以下PHP代碼替換URL結構中的文件夾名稱,以方便切換語言,同時保持當前頁面:將關聯數組(和foreach循環)轉換爲數組無關鍵(while循環?)

<?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"; 
?> 

但是,我已經意識到,用一個簡單的數組讀取$langs = array("en", "de", "fr");我可能會節省幾個字節並簡化代碼的下半部分,重新​​使用文件夾和圖像的變量?這會是一個更好的做事方式嗎?如何?

這是我到目前爲止,但$langs['$x']似乎不對? (事實上​​,我得到一個語法錯誤在我的循環條件!):

$langs = array("en", "de", "fr"); 
$n = count($langs); // 3 
while ($x = 0; $x < $n; $x++) { 
    $folder = $langs['$x'] . "/"; 
    $flags = $langs['$x'] . ".png"; 
    echo $folder . " " . $flags; // test 
} 
+1

爲什麼「節省幾個字節」物質雙引號? –

+0

我不僅試圖讓自己的代碼儘可能小,而且試圖爲我們的網站構建一個儘可能簡單的模板系統。通過「迫使」人們使用特定的文件夾結構/圖像名稱,這意味着推出新網站應該簡單得多,只需要更少的代碼行。 – mpdc

+0

@MatthewPeckham,爲什麼不使用現有的模板系統?有很多可供選擇的。 – Chris

回答

2

可以關聯數組轉換爲數字索引陣列array_values

$array = array('a' => 'A', 'b' => 'B', 'c' => 'C'); 

// array(0 => 'A', 1 => 'B', 2 => 'C'); 
$new_array = array_values($array); 
0

我想這是因爲您使用了錯誤的報價,所需要的變量替換

$langs = array("en", "de", "fr"); 
$n = count($langs); // 3 
while ($x = 0; $x < $n; $x++) { 
    $folder = $langs["$x"] . "/"; 
    $flags = $langs["$x"] . ".png"; 
    echo $folder . " " . $flags; // test 
}