Выборка данных из многомерного массива PHP - PullRequest
1 голос
/ 21 июня 2019

У меня есть API, который показывает данные с измерителей мощности в моем офисе. Всего четыре метра, и возвращаемые значения - это текущее потребление и общее потребление на разных счетчиках.

Я могу получить ответ как JSON (я не знаю, правильный ли это путь, но я новичок в API и это единственный подход, который я знаю), и я могу сказать, что это многомерный массив, но я не в состоянии получить отдельные значения. Мне кажется, что я близко, но я просто не могу заставить его работать.

Я пытаюсь дозвониться до счетчика с названием "Meter_Power_2" и "value", но нет.

<?php
    $url = "http://95.209.138.71:12380/api/v1/measurements";
    $data = json_decode(file_get_contents($url), TRUE);
    print_r($data);

?>
<br>

 <?php
    foreach($data as $row){
    echo $row['Meter_2_Power']['Value']."<br>";

    }

?>

В настоящее время все проходит по кругу и ничего мне не возвращается, так что, очевидно, что-то не так с моим циклом. Пожалуйста, помогите

РЕДАКТИРОВАТЬ: вот отклик в полном объеме.

{
  "measurements": [
    {
      "4000_RelayStatus": {
        "Timestamp": "2019-06-21T08:51:06",
        "Value": 0.0
      },
      "Address": "4000"
    },
    {
      "4000_Power": {
        "Timestamp": "2019-06-21T08:51:06",
        "Value": 0.0
      },
      "Address": "4000"
    },
    {
      "4001_RelayStatus": {
        "Timestamp": "2019-06-21T10:15:47",
        "Value": 0.0
      },
      "Address": "4001"
    },
    {
      "4001_Power": {
        "Timestamp": "2019-06-21T10:15:47",
        "Value": 0.0
      },
      "Address": "4001"
    },
    {
      "1200_RelayStatus": {
        "Timestamp": "2018-04-23T12:04:14",
        "Value": 0.0
      },
      "Address": "1200"
    },
    {
      "1200_Power": {
        "Timestamp": "2018-04-23T12:04:14",
        "Value": 0.0
      },
      "Address": "1200"
    },
    {
      "1100_RelayStatus": {
        "Timestamp": "2018-03-28T15:56:49",
        "Value": 0.0
      },
      "Address": "1100"
    },
    {
      "1100_Power": {
        "Timestamp": "2018-03-28T15:56:49",
        "Value": 0.0
      },
      "Address": "1100"
    },
    {
      "3000_RelayStatus": {
        "Timestamp": "2018-03-27T20:13:18",
        "Value": 0.0
      },
      "Address": "3000"
    },
    {
      "3000_Power": {
        "Timestamp": "2018-03-27T20:13:18",
        "Value": 0.0
      },
      "Address": "3000"
    },
    {
      "3500_RelayStatus": {
        "Timestamp": "2018-04-25T11:19:54",
        "Value": 0.0
      },
      "Address": "3500"
    },
    {
      "3500_Power": {
        "Timestamp": "2018-04-25T11:19:54",
        "Value": 0.0
      },
      "Address": "3500"
    },
    {
      "2500_RelayStatus": {
        "Timestamp": "2018-04-25T16:30:35",
        "Value": 0.0
      },
      "Address": "2500"
    },
    {
      "2500_Power": {
        "Timestamp": "2018-04-25T16:30:36",
        "Value": 0.0
      },
      "Address": "2500"
    },
    {
      "Address": "2600",
      "Meter_1_Power": {
        "Timestamp": "2019-06-21T11:44:42",
        "Value": 2694.54
      }
    },
    {
      "Address": "2600",
      "Meter_2_Power": {
        "Timestamp": "2019-06-21T11:43:59",
        "Value": 48.89
      }
    },
    {
      "Address": "2600",
      "Meter_1_Total": {
        "Timestamp": "2019-06-21T11:43:40",
        "Value": 21716.08
      }
    },
    {
      "Address": "2600",
      "Meter_2_Total": {
        "Timestamp": "2019-06-21T11:29:27",
        "Value": 1378.03
      }
    },
    {
      "Address": "2500",
      "Meter_4_Power": {
        "Timestamp": "2019-06-21T11:44:58",
        "Value": 43.22
      }
    },
    {
      "Address": "2500",
      "Meter_3_Power": {
        "Timestamp": "2019-06-21T11:44:58",
        "Value": 3508.51
      }
    },
    {
      "Address": "2500",
      "Meter_4_Total": {
        "Timestamp": "2019-06-21T11:38:16",
        "Value": 966.34
      }
    },
    {
      "Address": "2500",
      "Meter_3_Total": {
        "Timestamp": "2019-06-21T11:43:19",
        "Value": 39735.44
      }
    },
    {
      "2600_RelayStatus": {
        "Timestamp": "2018-04-25T16:20:51",
        "Value": 0.0
      },
      "Address": "2600"
    },
    {
      "2600_Power": {
        "Timestamp": "2018-04-25T16:20:51",
        "Value": 0.0
      },
      "Address": "2600"
    }
  ],
  "result": "OK"
}

Ответы [ 2 ]

1 голос
/ 21 июня 2019

Вот фрагмент,

foreach ($arr as $key => $value) {
    if (is_array($value)) {
        foreach ($value as $value1) {
            if (!empty($value1['Meter_2_Power']['Value'])) {
                echo $value1['Meter_2_Power']['Value'] . '<br/>';
            }
        }
    }
}

Если вы не мои, учитывая измерения жестко закодированы, то

foreach ($arr['measurements'] as $key => $value) {
    if (!empty($value['Meter_2_Power']['Value'])) {
        echo $value['Meter_2_Power']['Value'] . "\n";
    }
}

И

array_walk($arr['measurements'], function($value, $key){
    if (!empty($value['Meter_2_Power']['Value'])) {
        echo $value['Meter_2_Power']['Value'] . "\n";
    }
});
0 голосов
/ 21 июня 2019

Вы можете попробовать это для более простого:

<?php
    $url = "http://95.209.138.71:12380/api/v1/measurements";
    $data = json_decode(file_get_contents($url), TRUE);
?>
<br>

 <?php
    foreach($data['measurements'] as $row){
        if(isset($row['Meter_2_Power'])) echo $row['Meter_2_Power']['Value']."<br>";
    }

?>
...