我有一个 PHP 目录路径/文件列表,如下所示:
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 对象。
最佳答案
我从哪里开始:不要使用 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); ?>');
就是这样。
关于php - 将目录路径转换为javascript对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14343169/