2014-02-06 99 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 
}