在 php 中循环遍历 json,因为 5 次传递后中断



我有以下代码:

echo $response ."<br>";
$yummy=(json_decode($response));
$index_temp=0;
foreach ($yummy as $optie ) {
echo "TEMP = " . $yummy->measures[$index_temp]->value . "<br>";
$index_temp=$index_temp+2;
}

带有输出的数组为:

{"id":"datalog_transmission","firmwareType":"SenlabH","measures":[{"id":"temperature","timestamp":1565756178419,"value":14.8125},{"id":"humidity","timestamp":1565756178419,"value":89},{"id":"temperature","timestamp":1565756778419,"value":14.6875},{"id":"humidity","timestamp":1565756778419,"value":89},{"id":"temperature","timestamp":1565757378419,"value":14.625},{"id":"humidity","timestamp":1565757378419,"value":90},{"id":"temperature","timestamp":1565757978419,"value":14.625},{"id":"humidity","timestamp":1565757978419,"value":90},{"id":"temperature","timestamp":1565758578419,"value":14.6875},{"id":"humidity","timestamp":1565758578419,"value":90},{"id":"temperature","timestamp":1565759178419,"value":14.6875},{"id":"humidity","timestamp":1565759178419,"value":90},{"id":"temperature","timestamp":1565759778419,"value":14.4375},{"id":"humidity","timestamp":1565759778419,"value":90},{"id":"temperature","timestamp":1565760378419,"value":14.375},{"id":"humidity","timestamp":1565760378419,"value":87},{"id":"temperature","timestamp":1565760978419,"value":14.1875},{"id":"humidity","timestamp":1565760978419,"value":88},{"id":"temperature","timestamp":1565761578419,"value":14.3125},{"id":"humidity","timestamp":1565761578419,"value":88},{"id":"temperature","timestamp":1565762178419,"value":14.5625},{"id":"humidity","timestamp":1565762178419,"value":86},{"id":"temperature","timestamp":1565762778419,"value":14.75},{"id":"humidity","timestamp":1565762778419,"value":83},{"id":"temperature","timestamp":1565763378419,"value":14.875},{"id":"humidity","timestamp":1565763378419,"value":81},{"id":"temperature","timestamp":1565763978419,"value":14.9375},{"id":"humidity","timestamp":1565763978419,"value":81},{"id":"temperature","timestamp":1565764578419,"value":15.125},{"id":"humidity","timestamp":1565764578419,"value":79},{"id":"temperature","timestamp":1565765178419,"value":15.4375},{"id":"humidity","timestamp":1565765178419,"value":78},{"id":"temperature","timestamp":1565765778419,"value":15.6875},{"id":"humidity","timestamp":1565765778419,"value":78},{"id":"temperature","timestamp":1565766378419,"value":15.8125},{"id":"humidity","timestamp":1565766378419,"value":76},{"id":"battery_current_level","timestamp":1565766686419,"value":98}],"parameters":[],"events":[]}
TEMP = 14.8125
TEMP = 14.6875
TEMP = 14.625
TEMP = 14.625
TEMP = 14.6875

问题是,foreach 循环总是在 5 次传递后中断。

有谁知道问题出在哪里?

谢谢 马库斯

您正在循环仅包含 5 个项目的外部数组(id、firmwareType 等(。似乎您想循环度量值属性($yummy->measures(:

foreach ($yummy->measures as $optie ) {
echo "TEMP = " . $optie->value . "<br>";
}

这将产生以下输出:

TEMP = 14.8125
TEMP = 89
TEMP = 14.6875
TEMP = 89
TEMP = 14.625
TEMP = 90
...

根据您的评论,要以不同的方式输出 2 id,您可以执行以下操作:

foreach ($yummy->measures as $optie ) {
if ($optie->id === "temperature"){
echo "TEMP = " . $optie->value . "<br>";
}
if ($optie->id === "humidity"){
echo "HUM = " . $optie->value . "<br>";
}
}

这将为您提供:

TEMP = 14.8125
HUM = 89
TEMP = 14.6875
HUM = 89
TEMP = 14.625
HUM = 90
...

相关内容

最新更新