Я пытаюсь сделать это в течение нескольких дней через пробную версию и ошибку и т. Д., Но абсолютно ничего не получается. 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 на задней панели.