2012-04-29 98 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