我希望 PHP 中的 json_encode 返回 JSON 数组,即使索引不按顺序排列
但根据这个: http://www.php.net/ Manual/en/function.json-encode.php#94157 它不会。
我正在使用 flot,所以我需要一个返回数字索引的数组,但我得到的是:
jsonp1282668482872 ( {"label":"Hits 2010-08-20","data":{"1281830400":34910,"1281916800":45385,"1282003200":56928,"1282089600":53884,"1282176000":50262,"1281657600":45446,"1281744000":34998}} );
所以 flot 令人窒息。如果我在调用 json_encode 之前 var_dump 数组,它看起来像这样:
array(7) {
[1281830400]=>
int(34910)
[1281916800]=>
int(45385)
[1282003200]=>
int(56928)
[1282089600]=>
int(53884)
[1282176000]=>
int(50262)
[1281657600]=>
int(45446)
[1281744000]=>
int(34998)
}
有什么想法吗?
but according to this: http://www.php.net/manual/en/function.json-encode.php#94157 it won't.
I'm using flot so I need to have an array with numeric indexes returned but what I'm getting is this:
jsonp1282668482872 ( {"label":"Hits 2010-08-20","data":{"1281830400":34910,"1281916800":45385,"1282003200":56928,"1282089600":53884,"1282176000":50262,"1281657600":45446,"1281744000":34998}} );
so flot is choking. If I var_dump the array right before I call json_encode it looks like this:
array(7) {
[1281830400]=>
int(34910)
[1281916800]=>
int(45385)
[1282003200]=>
int(56928)
[1282089600]=>
int(53884)
[1282176000]=>
int(50262)
[1281657600]=>
int(45446)
[1281744000]=>
int(34998)
}
any ideas?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
正如 zneak 所说,Javascript(以及 JSON)数组不能有乱序的数组键。因此,您要么需要接受您将使用 JSON 对象,而不是数组,要么在
json_encode
之前调用array_values
:但是,看起来您想要用flot显示时间序列数据。正如您在 flot 时间序列示例 中看到的,它应该是像这样的两个元素数组:
给定你的数组(我们称之为
$data
),我们可以获得正确的 JSON,如下所示:As zneak says, Javascript (and thus JSON) arrays cannot have out-of-order array keys. Thus, you either need to accept that you'll be working with JSON objects, not arrays, or call
array_values
beforejson_encode
:However, it looks like you're looking to display time series data with flot. As you can see on the flot time series example, it should be a two element array like so:
Given your array (let's call it
$data
) we can get the proper JSON like so:这在概念上是不可能的。您无法在 JSON 中对具有固定索引的数组进行编码。
提醒一下,JSON 数组如下所示:
那里没有空间放置索引。
你应该在 Javascript 方面工作。接受
json_encode
将返回一个对象,您可以将该对象转换为数组。那应该不会太难。It's conceptually impossible. You cannot encode an array with fixed indices in JSON.
As a reminder, a JSON array looks like this:
There's no room to put indices there.
You should work on the Javascript side. Accepting that
json_encode
will return an object, you can convert this object into an array. That shouldn't be too hard.您可以通过传递 TRUE 作为第二个参数来强制
json_decode()
生成数组,但不能强制json_encode()
首先生成数组:You can force
json_decode()
to produce arrays by passing TRUE as the second parameter, but you can't forcejson_encode()
to produce arrays in the first place:您可以使用 array_merge 重新索引数字索引数组,如下所示:
You can use array_merge to reindex a numerically indexed array, like this:
对于flot来说,你所要求的并不是你真正想要的。您需要一个数组的数组,而不是一个数字的数组。也就是说,您想要看起来像这样的东西:
至于如何在 PHP 中做到这一点,我不确定。
For flot, what you're asking for isn't actually what you want. You want an array of arrays, not an array of numbers. That is, you want something that looks like this:
As for how to do that in PHP, I'm not sure.