2012-04-29 78 views
1

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

#实施例#

代替... ARRAY1 [] 数组2 [] 甚至array9000 []

财产以后像...变种my_array =“阵列'+'一些生成的数字';

然后就... my_array [] my_array [一定数量]

但这一点儿也不工作...(sollution NOW在底部)

作为JavaScript数组名称的变量



我有一些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的不起作用^


但由于开发无效居民这段代码做的工作......

<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]}) 
+0

尝试以蒸馏到其最基本的形式是什么,你正在尝试做的。重写代码的一个测试位以显示它,这里有太多的信息需要遵循。 –

回答

0

快速回答:您的numerated变量应该是可访问的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] } 
+0

谢谢!我会尝试一下! – Terry

+0

感谢您的输入,我无法获得您的“正确”答案(至今为止,我依然在此),但您的“快速”修复功能非常好。谢谢! – Terry

2

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

$varname = 'x'; 

$$varname = "something"; 

print $x; //Prints "something" 

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

+0

感谢您的信息,不知道它是不可能在JavaScript中。 @ Gaet所以...我试过修改多维数组,但我没有太多因为我无法想到在JavaScript中动态创建多维数组。感谢您的信息,我会尝试在我的PHP中设置它。 – Terry