我一直在寻找一段时间,但我无法找到解决问题的正确方法。
最重要的是,我尝试按照以下两个答案解决问题:
How to use cURL to get jSON data and decode the data?
和
How to parse out variables from a JSON var_dump in a Wordpress Plugin
但他们并没有解决我的问题。
所以,这是我的问题: 我得到了这个api:
我只能使用CURL库或fsockopen来检索数据。
我试图以这种方式使用CURL库:
<?php
$url = 'http://data.aishub.net/ws.php?username=xxxxxxxxxx&format=1&output=json&compress=0&latmin=38.7&latmax=39&lonmin=9.3&lonmax=9.4';
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL,$url);
$result=curl_exec($ch);
curl_close($ch);
var_dump(json_decode($result, true));
$array[0][1][0]["MMSI"];
echo $array;
?>
我得到了这个答案:
array(2) { [0]=> array(8) { ["ERROR"]=> bool(false) ["USERNAME"]=> string(16) "xxxxxxxxxx"
["FORMAT"]=> string(5) "HUMAN" ["LATITUDE_MIN"]=> float(38.5) ["LATITUDE_MAX"]=> int(39)
["LONGITUDE_MIN"]=> float(9.3) ["LONGITUDE_MAX"]=> float(9.5) ["RECORDS"]=> int(2) } [1]=> array(2)
{ [0]=> array(19) { ["MMSI"]=> int(636012570) ["TIME"]=> string(23) "2015-05-24 15:58:13 GMT"
["LONGITUDE"]=> float(9.32533) ["LATITUDE"]=> float(38.79291) ["COG"]=> float(145.6) ["SOG"]=>
float(13.7) ["HEADING"]=> int(511) ["NAVSTAT"]=> int(0) ["IMO"]=> int(9144794) ["NAME"]=>
string(9) "CE NIRIIS" ["CALLSIGN"]=> string(5) "A8GG6" ["TYPE"]=> int(81) ["A"]=> int(205) ["B"]
=> int(38) ["C"]=> int(24) ["D"]=> int(18) ["DRAUGHT"]=> int(8) ["DEST"]=> string(18) "LA SKHIRRA TUNISIA"
["ETA"]=> string(11) "05-26 02:00" } [1]=> array(19) { ["MMSI"]=> int(247325500) ["TIME"]=>
string(23) "2015-05-24 15:56:22 GMT" ["LONGITUDE"]=> float(9.4617) ["LATITUDE"]=> float(38.89681)
["COG"]=> float(123.2) ["SOG"]=> float(10.5) ["HEADING"]=> int(120) ["NAVSTAT"]=> int(0)
["IMO"]=> int(9346902) ["NAME"]=> string(9) "SYN TABIT" ["CALLSIGN"]=> string(4) "IBEK"
["TYPE"]=> int(1) ["A"]=> int(72) ["B"]=> int(23) ["C"]=> int(11) ["D"]=> int(4) ["DRAUGHT"]=>
float(6.4) ["DEST"]=> string(12) "THESSALONICO" ["ETA"]=> string(11) "05-28 17:00" } } }
采用以下格式:
array(2){[0]{part a}[1]{[0]{PART A}[1]{PART B}}}
我不需要在&#34;部分a&#34;上检索数据,但我需要处理A部分和B部分。
我的目的是在PART A中搜索一个值(船名),并在同一行内检索其对应的值为MMSI,纬度,经度。
PART A
&amp;现实中PART B
约为10,000个零件,而不仅仅是2个零件。
在我的示例中,我使用var_dump
检查所有结果,并echo
进行比较,以便我能获得正确的结果,因为我的数据总是在变化。
请你帮帮我吗?
答案 0 :(得分:0)
您正在使用json_decode()来显示var_dump中的数据,但不会将解码后的数组保存到稍后可以使用的变量中。
$result=curl_exec($ch);
curl_close($ch);
$shipsArray = json_decode($result, true);
var_dump($shipsArray);
/* do something with your data */
echo $shipsArray[0][1][0]["MMSI"];
答案 1 :(得分:0)
完整更新,以函数形式包含$ response错误检查和搜索比较。
<?php
Function SO_Aldo($srch) {
$result = "";
$url = 'http://data.aishub.net/ws.php?username=xxxxxxxxxx&format=1&output=json&compress=0&latmin=38.7&latmax=39&lonmin=9.3&lonmax=9.4';
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL,$url);
$json = curl_exec($ch);
curl_close($ch);
$data = json_decode($json, true); // data array
$response = $data[0]; // the data[0] response ... Error, username, format, etc
unset($data[0]); // remove data response from array leaving only results
#var_dump($data); // debugging
#var_dump($response); // debugging
// Check for Response ERROR
IF ($response['ERROR']) {
$result = "Curl Response Error";
}ELSE{
foreach($data as $index => $records) {
foreach ($records as $key => $value) {
// compare srch against name
IF ($value['NAME'] == $srch) {
$result = "<p>Name: ".$value['NAME']."<br>MMSI: ".$value['MMSI']."<br>Longitude: ".$value['LONGITUDE']."<br>Latitude: ".$value['LATITUDE']."</p>";
}
}
}
}
IF (empty($result)) { $result = "No Results"; }
return $result;
}
// usage
$srch = "SYN TABIT"; // $_POST Value to search for
$result = SO_Aldo($srch);
echo($result);
?>