Php 构建JSON目录列表

Php 构建JSON目录列表,php,arrays,json,Php,Arrays,Json,我一直在使用数组来实现这一点,然后使用json_encode,但我有一个问题,我需要使用多维数组来正确构建json字符串 这方面的问题是内存。正如您可能想象的那样,为目录中的每个文件使用一个数组,这意味着您在一个数组中有数百个数组,这在内存上并不便宜 我的问题是,有不同的方法吗?我有以下数组结构: array(array(“key”=>“value”)、array(“key”=>“value”))为什么不修改以下代码,以便将name属性重命名为src? 我猜您也不需要大小属性 <?php

我一直在使用数组来实现这一点,然后使用json_encode,但我有一个问题,我需要使用多维数组来正确构建json字符串

这方面的问题是内存。正如您可能想象的那样,为目录中的每个文件使用一个数组,这意味着您在一个数组中有数百个数组,这在内存上并不便宜

我的问题是,有不同的方法吗?我有以下数组结构:


array(array(“key”=>“value”)、array(“key”=>“value”))

为什么不修改以下代码,以便将name属性重命名为src? 我猜您也不需要大小属性

<?php
class mFile
{
    public $name, $time, $size;
}

foreach (glob("*.*") as $curFilename)
{
    $curFileObj = new mFile;
    $curFileObj->name = $curFilename;
    $curFileObj->time = date("d/m/Y - H:i", filectime($curFilename));
    $curFileObj->size = filesize($curFilename);
    $fileArray[] = $curFileObj;
}
printf("%s", json_encode($fileArray));
?> 

编辑:样本输出

[{“name”:“001 deleteMe.html”,“time”:“26/09/2012-00:09”,“size”:15062},{“name”:“001 test.html”,“time”:“18/10/2012-04:29”,“size”:2981},{“name”:“001.html”,“time”:“02/10/2012-01:26”,“size”:2596}]

结果: 数组(大小=3) 0 => 数组(大小=1) 'key1'=>字符串'value1'(长度=6) 1 => 数组(大小=1) 'key2'=>字符串'value2'(长度=6) 2 => 数组(大小=1)
'key3'=>字符串'value3'(长度=6)

您的最终目标是什么?您可能不需要将所有内容都保存在内存中,并以迭代方式构造json,从而“循环”内存。我必须能够构建一个json字符串,基本上包含目录中的每个文件,但文件名必须是键“src”的值。基本上,我要做的是一个媒体播放器,它可以从JSON字符串中读取所需的文件。我正在使用Projekktor库,但是它需要“src”键。创建一个对象,这主意不错。我试试这个,谢谢。不过,我唯一的问题是,我想随机化JSON字符串中的顺序。我一直在洗牌数组,但这对这个不起作用,对吗?不用担心,一个对象对我来说似乎是一个明确的选择。它返回一个对象数组。我看不出有什么理由你不能(a)用javascript洗牌数组,或者(b)创建一个索引数组。然后洗牌。例如,如果返回10项,则创建一个数组,其中的元素值为0,1,2,3,4,5,6,7,8,9。然后洗牌这个数组。一旦完成,只需一步一步地完成。随机播放顺序,保证在播放完之前不会重复一个文件。好的。然而,它似乎根本没有打印出来。打印不会打印任何内容,也不会耗尽内存:我可以在打印后执行echo's。我可以
print\r
fileArray,它显示得很好,只是编码时没有输出任何东西。嗯,听起来很奇怪。我在windows上使用PHP5.3.1.0,但我忘记了linux下的版本。两者都可以在这里正常运行脚本(或者在linux中运行类似版本的脚本)。我只尝试过281个文件,也许这是个问题。为清楚起见,我看到您在评论中混合了
print
printf
。我想你的意思是printf,对吧?(不要把这和你对print_r的使用混为一谈,它当然是一个完全不同的野兽)是的,我的意思是
printf
;)我目前在目录中有大约200个文件,所以这应该不是问题。在Windows Server 2012上运行PHP 5.5.1。
$array1['key1'] = "value1";
$array2['key2'] = "value2";
$array3['key3'] = "value3";

$finalarray = array($array1, $array2 , $array3);

var_dump($finalarray);