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