1

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/..."、x_i、y_i、z_iなどが「/」以外の文字である形式のphp文字列をネストされたjavascriptオブジェクトに解析しようとしていますx1x2x3...xn.y1y2...yn.z1z2z3...zn = {};。このユーザーは、区切られた文字列(彼の場合は「_」)に基づいてjavascriptオブジェクトを動的に追加しようとしていたため、ここで解決策を見つけたと思います。

4

1 に答える 1

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); ?>');

それでおしまい。

于 2013-01-15T17:30:56.133 に答える