2013-01-15 47 views
1

我的目錄路徑/在PHP文件,像這樣的列表:目錄路徑轉換爲JavaScript對象

path1/path2/foo1_jpg 
path1/foo2_png 
path2/path3/bar_pdf 
path2/ 
path1/ 

,我想這些轉換爲JavaScript對象。我想到剛剛轉換「/」,以期,然後說是這樣的:

<script> 
    var files = new Array(); 
    <?php $dirlist = getFileList("images",true); ?> //returns array of directory paths (and other info) 
    <?php foreach($dirlist as $file): ?> 
     files.<?=$file['name']?> = "$file['name']"; 

     //where $file['name'] returns, for example, path1.path2.foo1_jpg 

    <?php endforeach; ?> 
console.log(files); 
</script> 

唯一的問題我已經是,如果一個文件名或目錄以數字開頭的,即我不能說:files.001.foo = "bar";

我相信我需要重載點運算符來處理以數字開頭的名字。這是最好的方式,還是有另一種方式?

我本質上是試圖解析一個形式爲"x1x2...xn/y1y2...yn/..."的PHP字符串,其中x_i,y_i,z_i等是除「/」以外的字符,嵌入到一個嵌套的javascript對象x1x2x3...xn.y1y2...yn.z1z2z3...zn = {};中。我想我找到了解決方案here由於此用戶也試圖動態地添加基於分隔字符串的javascript對象(在他的情況下是「_」)。

+0

我不明白:你爲什麼要轉換「/」? –

+0

是的,爲什麼要將「/」轉換爲「。」? – gopi1410

+0

,因爲'file.dir1/dir2/dir3 =「bar」'在javascript中無效。因此,將「/」s轉換爲「。」允許我說'file.dir1.dir2.dir3 =「bar」'。它還允許我輕鬆分配嵌套對象。這是否有意義,還是應該重新措辭? – thed0ctor

回答

3

我該從哪裏開始:不要使用new Array()來創建一個新的數組,只需使用文字[]即可。谷歌的原因。

數組與對象不同 - 它是Object的增強。所以它不支持點符號。此外,您的PHP代碼已關閉:引用的$files['name']不明確(PHP不知道要打印什麼:$ file的值,然後是['name']作爲簡單字符串,或者$file['name']。但更重要的是:它不在PHP中標籤...

這裏是做你想要的東西的一種方式 - 但你不應該使用它:

var files = {};//create object. properties can be numeric, too 
<?php 
    foreach ($dirlist as $key => $file) 
    {//use $key for numeric index/properties 
     echo 'files['.$key.'] = "'.$file['name'].'";'; 
     //or with double quotes: 
     echo "files[$key] = '{$file['name']}';";//need the curly's for ambiguity, or rather avoid ambiguity 
    } 
?> 

如果你想要的屬性有前導零,那麼你可以通過使用str_pad或任substr('000'.$key,-3);

下面是我會做的:

var files = JSON.parse('<?= json_encode($dirlist); ?>'); 

就是這樣。

+0

使用JSON的+1。 –

+0

是的,迴應JSON是要走的路。 +1 –

+0

@SeainMalkin:當然,這將是我對這個問題唯一的答案,但我不能忽略一個相當重要的語法錯誤,並且在我的腦海裏,非常嚴重的JS數組濫用 –