变量作为JavaScript数组名称

时间:2012-04-29 20:29:54

标签: php javascript jquery arrays variables

问题:尝试使用“动态”变量来访问JSON / JavaScript数组。

#EXAMPLE#

而不是...... array1 [] array2 [] 甚至array9000 []
<登记/> 类似...... var my_array ='array'+'some generated number';

然后只是... my_array [] my_array [某个号码]

但是这样做'工作...... (溶解现在在底部)



我有一些PHP正在读取一些目录,并在那里创建JSON数组。 JSON数组按顺序命名,它们存储图像目录...

示例JSON数组名称: images0,images1,images2等...

    <?php
        $dir = opendir(getcwd());
        $num=0;
        while($folder = readdir($dir)) {
            if($folder !== '.' && $folder !== '..'){
                if (is_dir($folder)) {
                    echo '<script type="text/javascript">';
                    $folderCHILD = opendir($folder);
                    while($image = readdir($folderCHILD)) {
                        if($image !== '.' && $image !== '..'){
                            $images[]=$folder."/".$image;
                        }
                    }
                    closedir($folderCHILD);
                    echo 'images'.$num.' ='.json_encode($images);
                    unset($images);
                    echo '</script>';
                    $num++;
                }
            }
        }
        closedir($dir);
    ?>


然后我有一些Javascript / Jquery试图通过点击功能访问这些按顺序命名的JSON数组。该函数将使用存储在JSON数组中的图像目录创建图像。

<script type="text/javascript">
    $(document).ready(function() {
        $('something').click(function() {
            var indexCURRENT = $(this).index();
            var ARRAY = 'images'+indexCURRENT;
            $(document.createElement("img")).attr({ src: ARRAY[some number]}).addClass("image").appendTo('body');
        });
    });
</script>

^以上Javascipt / Jquery不起作用^

感谢 dev-null-dweller 这一点代码确实有用......

<script type="text/javascript">
    $(document).ready(function() {
        $('#gallery_link p').click(function() {
            var indexCURRENT = $(this).index();
            var ARRAY = 'images'+indexCURRENT;
            $(document.createElement("img")).attr({ src: window[ARRAY][some number]}).addClass("image").appendTo('body');
        });
    });
</script>

差异?

.attr({ src: window[ARRAY][some number]})

2 个答案:

答案 0 :(得分:2)

我很确定你不能在JS中这样做。您不能将变量内容用作变量名称。这在php中是可行的,你可以做到

$varname = 'x';

$$varname = "something";

print $x; //Prints "something"

但不是在javascript中。只需使用多维数组或哈希即可。

答案 1 :(得分:0)

快速回答:您的数字变量应该可以在window对象中访问,像数组(window['images1']一样访问),所以只需更改

{ src: ARRAY[1]}

{ src: window[ARRAY][1] }

应该让它发挥作用。

正确答案:使用数组/对象,这很简单:

<script>
echo '<script type="text/javascript">';
echo 'images = [];';
$folderCHILD = opendir($folder);
while($image = readdir($folderCHILD)) {
    if($image !== '.' && $image !== '..' && $folder !=='resource'){
        $images[]=$folder."/".$image;
    }
}
closedir($folderCHILD);
echo 'images.push('.json_encode($images).');';
echo '</script>';

然后:

{ src: images[indexCUR][1] }