Вытяните API-интерфейс JSON из URL-адреса и отображения в PHP

Я пытаюсь сделать это в течение нескольких дней через пробную версию и ошибку и т. Д., Но абсолютно ничего не получается. PHP – это не моя сильная сторона, но мне в целом это нравится, и я могу учиться, когда мне нужно делать определенные вещи.

То, что я пытаюсь сделать, – это взять API с одной используемой платформы и ввести ее в другую используемую платформу. Я могу получить данные из API достаточно легко через URL-адрес, и он отлично работает на другом сервере, поэтому я уверен, что все в порядке с этой стороной.

Проблема в том, что когда мне удается получить его из URL-адреса, он выглядит довольно грязным. Ничто из того, что я пробовал до сих пор, покажет его как хороший аккуратный блок. Кроме того, я хотел бы иметь возможность извлекать определенные данные из результата и отображать только это. При посещении через URL данные выводятся следующим образом (изменились значения конфиденциальности и т. Д., Но целостность должна оставаться):

{«Данные»: [{«DeviceID»: «1», «DeviceName»: «Телефон 1», «Платформа»: «Телефонная ОС», «Издание»: «Делюкс», «Состояние»: «0», Время ":" 2016-03-16T13: 47: 44 + 01: 00" }]}

По существу, я пытаюсь сделать следующее:

  • Отображение данных в списке блоков, в отличие от длинных строк
  • Разрешить выбор конкретного устройства через «Имя устройства», а затем отобразить информацию, относящуюся к этому устройству

Я пробовал следующие сценарии:

1:

<?php $json = file_get_contents('URLHERE'); $obj = json_decode($json); echo $obj->DeviceID; ?> 

2:

 <?php $ch = curl_init(); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_URL, 'URLHERE'); $result = curl_exec($ch); curl_close($ch); $obj = json_decode($result); echo $result->DeviceName; ?> 

3:

 <?php $url = 'URLHERE'; $obj = json_decode(file_get_contents($url), true); echo $obj['DeviceID']; ?> 

4:

 <?php $url = "URLHERE"; $json = file_get_contents($url); $json_data = json_decode($json, true); echo "Device: ". $json_data["DeviceID"]; ?> 

5:

 <?php $json = file_get_contents('URLHERE'); $encodeJ = utf8_encode($json); $obj = json_decode($encodeJ); var_dump($obj-> DeviceID); ?> 

Четвертый – самый близкий, мне удалось добраться до него, отображая данные с помощью этих методов, но вместо какой-либо информации я просто получаю «Устройство: NULL»,

Любая помощь будет оценена по достоинству. Начинаем вытаскивать мои волосы!

UPDATE: удалось добиться определенного прогресса в следующем:

 <?php $data = file_get_contents('URLHERE'); $response = json_decode($data, true); echo 'Device: ' . $response['Data']['0']['DeviceName']; echo 'Device: ' . $response['Data']['1']['DeviceName']; ?> 

Это отображает имена устройств из массива для значений 0 и 1. Поэтому теперь мне нужно выяснить, как итерации по массиву и отображения каждого из них последовательно, в отличие от жесткого кодирования каждого из них.

Ваш DeviceID находится в Data и это array поэтому вы не можете получить доступ напрямую. Когда ты

 $data = json_decode('{"Data":[{"DeviceID":"1","DeviceName":"Phone 1","Platform":"Phone OS","Edition":"Deluxe","State":"0","Time":"2016-03-16T13:47:44+01:00"}]}', true);//I am using array so second parameter is true to easily demonstrate 

Ваша структура

  [ "Data" => [ [ "DeviceID" => "1", "DeviceName" => "Phone 1", "Platform" => "Phone OS", "Edition" => "Deluxe", "State" => "0", "Time" => "2016-03-16T13:47:44+01:00", ], ], ] 

Таким образом, чтобы получить только первый DeviceID если вы хотите, тогда

 $deviceID = isset($data['Data'][0]['DeviceID']) ? $data['Data'][0]['DeviceID'] : null; 

или если вы хотите, чтобы все DeviceID

  $deviceIds = []; if (isset($data['Data']) && is_array($data['Data'])) { foreach ($data['Data'] as $row) { if (isset($row['DeviceID'])) { $deviceIds[] = $row['DeviceID']; } } } 

или вы можете использовать array_column если ваша версия php> = 5.5.0 или php 7

  $deviceIds = []; if (isset($data['Data']) && is_array($data['Data'])) { $deviceIds = array_column($data['Data'], 'DeviceID'); } 

Чтобы получить данные, используйте:

 $json = file_get_contents( $url ); 

Затем введите его в массив, как:

 $arr = json_decode( $json, TRUE ); 

Чтобы «отобразить данные в списке блоков, в отличие от длинных строк», используйте:

 foreach ( $arr AS $element ) { foreach ( $element AS $e ) { echo $e['DeviceName'] . '<br>'; } } 

Чтобы «Разрешить выбор конкретного устройства через« Имя устройства », а затем отобразить информацию, относящуюся к этому устройству», используйте:

 $deviceName = "Phone 1"; // depending upon your use case, you'll need to decide how you want to set this variable; it's hard coded here for the sake of example foreach ( $arr AS $element ) { foreach ( $element AS $e ) { if ( $e['DeviceName'] = $deviceName ) { echo '<pre>'; print_r( $e ); echo '</pre>'; } } } 

Хотя не совсем понятно, что вы подразумеваете под «Разрешить выбор конкретного устройства через« Имя устройства »», я склонен полагать, что вы ищете способ позволить пользователю выбрать устройство из списка имен устройств. Это не задача, которую вы можете выполнить только с помощью PHP. Вам нужно будет создать что-то для внешнего интерфейса в HTML или Javascript, который взаимодействует с вашим PHP на задней панели.