我有以下PHP代码替换URL结构中的文件夹名称,以便在停留在当前页面时轻松切换语言:
<?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
}
答案 0 :(得分:2)
您可以使用array_values
将关联数组转换为数字索引数组:
$array = array('a' => 'A', 'b' => 'B', 'c' => 'C');
// array(0 => 'A', 1 => 'B', 2 => 'C');
$new_array = array_values($array);
答案 1 :(得分: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
}