JavaScript数组格式问题

时间:2010-11-05 16:36:23

标签: javascript arrays multidimensional-array

有人可以帮我正确格式化这个JavaScript数组吗?我显然缺少一些基本的东西:

使用Javascript:

<script type="text/javascript">

    var widths = new Array("225","320","480", "--");
    var sidewalls = new Array();
    sidewalls["225"] = new Array("65","55","45","40", "--");
        var rims["225"] = new Array();
            rims["225"]["65"] = new Array("R17", "--");
            rims["225"]["55"] = new Array("R17","R18", "--");
            rims["225"]["45"] = new Array("R17", "--");
            rims["225"]["40"] = new Array("R18", "--");
    sidewalls["320"] = new Array("70", "--");
        var rims["320"] = new Array();
            rims["320"]["70"] = new Array("R20","R24", "--");
    sidewalls["480"] = new Array("65", "--");
        var rims["480"] = new Array();
            rims["480"]["65"] = new Array("R28", "--");

</script>

PHP用于生成上述JavaScript:

<?php   while($row = mysql_fetch_array($result)) {
    list($width, $sidewall, $rim) = explode("/",$row['meta_value']); $menu[$width][$sidewall][$rim] = 1; } 

    $widths = implode('","', array_keys($menu));
        print "var widths = new Array(\"$widths\", \"--\");\n";
        print "\nvar sidewalls = new Array();\n";

    foreach($menu as $width => $sidewall_array) {
        $sidewalls = implode('","', array_keys($sidewall_array));
            print "sidewalls[\"$width\"] = new Array(\"$sidewalls\", \"--\");";
            print "\nvar rims[\"$width\"] = new Array();\n";

    foreach($sidewall_array as $sidewall => $rim_array) {
        $rims = implode('","', array_keys($rim_array));
            print "rims[\"$width\"][\"$sidewall\"] = new Array(\"$rims\", \"--\");";

    }
} ?>

提前感谢您的帮助

斯图

1 个答案:

答案 0 :(得分:2)

你不应该将var放在数组赋值的前面,而只是初始定义。

所以var widths = ...没问题,但var rims["225"] = ...不正确,应该是rims["225"] = ...

更改你的PHP;在输出该文本的代码行中删除“var”。改变这个:

print "\nvar rims[\"$width\"] = new Array();\n";

对此:

print "\nrims[\"$width\"] = new Array();\n";

这将解决您的问题。但实际上,这种整体解决方案并不是最好的。您应该考虑查看json-encode php方法。

你可以采用一个完全结构化的php数据结构,并使用这一个命令转换为可以通过javascript读取的内容。尝试用下面的替换你的PHP,看看会发生什么(注意这是未经测试的,但这是基本的想法):

<?php
    while($row = mysql_fetch_array($result)) { list($width, $sidewall, $rim) = explode("/",$row['meta_value']); $menu[$width][$sidewall][$rim] = 1; }

    print "var widths = " . json_encode(array_keys($menu)) . ";\n";
    print "var sidewalls = " . json_encode($menu) . ";\n";
?>