我一直在尝试通过反复试验等方式做到这一点几天,但一无所获。PHP不是我的强项,但我通常对它感到满意,当我需要做特定的事情时,我可以边走边学。
我正在尝试做的是从使用的一个平台获取 API,并将其输入到使用的另一个平台中。我可以通过 URL 轻松地从 API 获取数据,并且它在不同的服务器上运行良好,所以我很确定在这方面一切都很好。
问题是,当我设法从URL获取它时,它看起来很混乱。到目前为止,我尝试过的任何内容都不会将其显示为一个整洁的块。此外,我希望能够从结果中提取特定数据并显示这些数据。通过 URL 访问时,数据如下所示(更改了隐私等值,但完整性应保持):
{"数据":[{"设备ID":"1","设备名称":"电话 1","平台":"手机操作系统","版本":"豪华","状态":"0","时间":"2016-03-16T13:47:44+01:00"}]}
从本质上讲,我要做的是:
- 在阻止列表中显示数据,而不是长行
- 允许通过"设备名称"选择特定设备,然后显示与该设备相关的信息
到目前为止,我已经尝试了以下脚本:
1:
<?php
$json = file_get_contents('URLHERE');
$obj = json_decode($json);
echo $obj->DeviceID;
?>
阿拉伯数字:
<?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",而不是任何信息
任何帮助将不胜感激。开始把我的头发!
更新:在以下方面取得了一些进展:
<?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;
或者,如果您想要所有设备ID,则
$deviceIds = [];
if (isset($data['Data']) && is_array($data['Data']))
{
foreach ($data['Data'] as $row)
{
if (isset($row['DeviceID']))
{
$deviceIds[] = $row['DeviceID'];
}
}
}
或者,如果您的 PHP 版本是>= 5.5.0 或 PHP 7,您可以使用 array_column
$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交互。