0

我尝试使用 PHP 解码将下面的 JSON 字符串解析为一个数组,这样我就可以从文件中提取两个通道的当前和日期。

我的 json 文件 owl_output.json 看起来像..

{"channels":{"0":[{"current":1288,"units":"w"},{"day":31278.57,"units":"wh"}],"1":    [{"current":660,"units":"w"},{"day":9191.11,"units":"wh"}]}}

我只显示一个结果,我设法开始工作的 php 代码如下

<?php
$string = file_get_contents('owl_output.json');
$data = json_decode($string,true);
print_r($json);
foreach ($data['channels']['0'] as $data)
{
    echo $data ['current'];
}
?>

这仅显示通道 0 的当前值。如果我尝试添加其他字段,则不会显示

echo $data ['current']['day']; (不起作用)

有人可以建议我如何为通道 0 和 1 显示当前和日期吗?

我的目标是在最后在 html 页面中显示它并继续轮询 json 文件?

它显示的数组如下

Array
(
    [channels] => Array
        (
            [0] => Array
                (
                    [0] => Array
                        (
                            [current] => 1288
                            [units] => w
                        )

                    [1] => Array
                        (
                            [day] => 31278.57
                            [units] => wh
                        )

                )

            [1] => Array
                (
                    [0] => Array
                        (
                            [current] => 660
                            [units] => w
                        )

                    [1] => Array
                        (
                            [day] => 9191.11
                            [units] => wh
                        )

                )

        )

)

任何人都可以提供任何帮助吗?

谢谢

4

3 回答 3

1

变量 $data 冲突:

用于存储数据,在foreach循环中使用。重命名 foreach 中的 $data 变量,例如:

<?php
$string = file_get_contents('owl_output.json');
$data = json_decode($string,true);
print_r($json);
foreach ($data['channels'] as $channel)
{
    echo $channel[0]['current'];
    echo $channel[1]['day'];
}
?>

我确实进行了编辑,因为存在其他错误,因为每条记录中都没有“当前”。

于 2013-10-03T19:03:32.323 回答
0
foreach ($data['channels'] as $chanel)
{
    echo $chanel[0]['current'];
    echo $chanel[1]['day'];
}
于 2013-10-03T19:02:07.583 回答
0

$data循环和坏数组索引中的引用冲突:

foreach ($data['channels'] as $channel)
{
    echo $channel[0]['current'];
    echo $channel[1]['day'];
}
于 2013-10-03T19:07:35.933 回答