我一直试图通过反复试验这几天来做这件事,但绝对无处可去。 PHP并不是我的强项,但我对它很满意,当我需要做特定的事情时,我可以学习。
我尝试做的是从一个使用的平台获取API,并将其输入到另一个使用的平台。我可以通过URL轻松地从API获取数据,并且它可以在不同的服务器上正常运行,因此我非常确定在这方面的一切都很好。
问题是,当我设法从URL获取它时,它看起来非常混乱。到目前为止,我没有尝试过将它显示为一个漂亮整洁的块。此外,我希望能够从结果中提取特定数据并显示它。通过URL访问时数据如下(已更改隐私等值,但应保持完整性):
{" Data":[{" DeviceID":" 1"," DeviceName":" Phone 1&#34 ;,"平台":"电话操作系统","版本":"豪华","状态":&# 34; 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);
?>
第四个是最接近我设法使用这些方法显示数据,而不是我刚收到的任何信息&#34;设备:NULL&#34;
任何帮助将不胜感激。开始把我的头发拉出来!
更新 已成功地通过以下方式取得了一些进展:
<?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的数组中的设备名称。所以现在我需要弄清楚如何遍历数组并按顺序显示每个数组,而不是对每个数组进行硬编码。
答案 0 :(得分:2)
DeviceID
位于Data
&amp;它是 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'];
}
}
}
或者如果您的php版本是&gt; = 5.5.0或php 7
,您可以使用array_column
$deviceIds = [];
if (isset($data['Data']) && is_array($data['Data']))
{
$deviceIds = array_column($data['Data'], 'DeviceID');
}
答案 1 :(得分:1)
要获取数据,请使用:
$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交互的内容。