将关联数组(和foreach循环)转换为不带键的数组(和while循环?)

时间:2014-02-06 14:53:06

标签: php arrays

我有以下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
}

2 个答案:

答案 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
}