我有一个库,它可以读取一个目录并在单个对象中加入大量信息,所以我可以通过JSON获取它并使用JavaScript进行处理。我有一个调用的lib我和返回JSON的PHP,这样简单:PHP json_encode将数组切换到特定服务器中的对象...为什么?
echo('&vars_ini=OK&dados='.json_encode($Lista).'&vars_fim=');
得到“dados”的值之后,这是我的了:
{"erro":"OK","Lista":[{"nome":"a-process.gif","base":"a-process","ext":"gif","bytes":93117,"datac":"07\/04\/2016 13:46","datam":"31\/05\/2017 20:06","timestampc":1460047579,"timestampm":1496272006}, ... etc. there is also other lists as subdirectories.
但在这个特定的服务器,我得到这个:
{"erro":"OK","Lista":{"22":{"nome":"a-process.gif","base":"a-process","ext":"gif","bytes":93117,"datac":"03\/08\/2016 18:33","datam":"03\/08\/2016 18:26","timestampc":1470249183,"timestampm":1470248785},"43":{"nome":"g-agenda.gif","base":"g-agenda","ext":"gif","bytes":1454,"datac":"03\/08\/2016 18:33","datam":"03\/08\/2016 18:26","timestampc":1470249183,"timestampm":1470248786}, ... etc.
而不是“Lista”呈现与“[”,有一个“{”。我的测试服务器运行的是PHP 5.6.10,这个服务器的版本是5.6.27。我不认为是一个版本问题(真的?),但也许一些指令告诉工作是这样的。
简单的解决方案是将这些对象转换为数组,但没有什么大不了的,但我试图理解为什么会发生这种情况并优化我的代码。
有趣。那么,通过使用readdir和$ this-> Lista [] = $ ldArq;来创建一个空数组($ this-> Lista = array();),然后逐个创建一个空数组。除此之外,还有一些排序操作(按日期,名称等)可能发生与否。我会尝试重新列举阵列,看看我是否会有连续的索引... – Gustavo
是的!通过添加$ this-> Lista = array_values($ this-> Lista);该列表现在被视为简单的顺序数组[]。仍然是一个谜,为什么相同的代码在其他环境尝试做同样的任务有不同的工作......我错过了一些东西......但是这条简单的线将防止进一步的问题。我建议你在答案中加入这个解决方案,这样我就可以标记它。 – Gustavo
在底部添加。认为这将是更容易找出为什么索引是他们的方式:) – AbraCadaver