我有以下json:
{
"data": [
{
"id": "116376655202954/insights/page_impressions_organic/day",
"name": "page_impressions_organic",
"period": "day",
"values": [
{
"value": 13059,
"end_time": "2013-02-22T08:00:00+0000"
},
{
"value": 15223,
"end_time": "2013-02-23T08:00:00+0000"
},
我使用PHP获取value
和end_time
以下foreach的值:
foreach ($page_impressions_organic['data'] as $page_impression_organic) {
foreach($page_impression_organic['values'] as $key => $page_impression_organic_values) {
$end_time = strval($page_impression_organic_values['end_time']);
$ds = substr($end_time, 0, -14);
$value = intval($page_impression_organic_values['value']);
echo '[\'' . $ds . '\', ' . $value . ']';
}}
一切都像它应该的那样工作,我的问题是现在我有一个不同的json:
{
"data": [
{
"id": "116376655202954/insights/page_storytellers_by_story_type/day",
"name": "page_storytellers_by_story_type",
"period": "day",
"values": [
{
"value": {
"fan": 2043,
"page post": 293,
"user post": 5
},
"end_time": "2013-02-22T08:00:00+0000"
},
{
"value": {
"fan": 1085,
"page post": 398,
"user post": 5
},
"end_time": "2013-02-23T08:00:00+0000"
},
并且我无法获得相同的结果,因为value
是一个数组,我特别需要它的page post
值。我需要保留我的回声用于进一步范围的形式。我已经为这样做了另一个foreach:
foreach ($page_talking_abouts['data'] as $page_talking_about) {
foreach($page_talking_about['values'] as $key => $page_talking_about_values) {
foreach($page_talking_about_values['value'] as $page_talking_about_value) {
$end_time = strval($page_talking_about_values['end_time']);
$ds = substr($end_time, 0, -14);
$value = intval($page_talking_about_value['page post']);
echo '[\'' . $ds . '\', ' . $value . ']';
}}}
但$value
每次都是0 ......我该怎么办?
答案 0 :(得分:2)
它死得很简单。请参阅重写的代码:
foreach ($page_talking_abouts['data'] as $page_talking_about) {
foreach($page_talking_about['values'] as $key => $page_talking_about_values) {
$end_time = strval($page_talking_about_values['end_time']);
$ds = substr($end_time, 0, -14);
$value = intval($page_talking_about_values['value']['page post']);
echo '[\'' . $ds . '\', ' . $value . ']';
}
}
如果您只需要一个已知的索引,那么您真的不需要遍历内部值数组。您的解决方案中发生的情况是,对于嵌套值数组中的每个值,您尝试获取索引page post
,但由于嵌套数组的值不是数组索引{{ 1}}返回page post
,如果输入null
,则转换为0
。
除此之外,我真的建议将变量重命名为更具可读性的东西。那些具有细微差别的长名称使得难以阅读代码。
答案 1 :(得分:1)
我认为你不需要第三个for循环,因为value
数组每end-time
只存在一次。
尝试更改您的代码:
foreach ($page_talking_abouts['data'] as $page_talking_about) {
foreach($page_talking_about['values'] as $key => $page_talking_about_values) {
// note: removed third for-loop
$end_time = strval($page_talking_about_values['end_time']);
$ds = substr($end_time, 0, -14);
// note: changed this line to directly read out the page posts
$value = intval($page_talking_about_values['value']['page post']);
echo '[\'' . $ds . '\', ' . $value . ']';
}}
答案 2 :(得分:0)
你不应该直接循环它。使用json_decode解码字符串,然后执行foreach循环,然后再次json_encode