我期待獲得一些關於如何使模塊化代碼執行PHP parse_ini_file並使用返回的值運行JSON解碼的輸入。使用PHP解析INI文件並運行JSON_DECODE
我有一個BACnet API,爲自動化系統中的BACnet點返回一個JSON結構。我編寫了下面的代碼來解碼JSON數據以僅返回「當前值」字段,然後在網頁上顯示該值。
<?php
$url = "http://hostname.lcl:47800/api/v1/bacnet/devices/10100/objects/0.0";
$json = file_get_contents($url);
$json_data = json_decode($json, true);
echo "<b>Room temperature</b>: ". $json_data["present-value"]. " DEG F";
;?>
這很好,但我想使這個代碼模塊化,因此它可以用於許多其他點。
我創建了一個INI文件,其中包含其他點的列表以及包含來自API的JSON數據的URL。
## BACnet Configuration File
# BACnet Object URLs from WACNET Browser API
[bacnet]
SEA_RMT = http://hostname.lcl:47800/api/v1/bacnet/devices/10100/objects/0.0
SEA_SRV_SEA_SV1_01_EXHT = http://hostname.lcl:47800/api/v1/bacnet/devices/10100/objects/0.3
SEA_SRV_SEA_SV1_02_EXHT = http://hostname.lcl:47800/api/v1/bacnet/devices/10100/objects/0.4
SEA_SRV_SEA_SV1_03_EXHT = http://hostname.lcl:47800/api/v1/bacnet/devices/10100/objects/0.5
我希望做的是使用INI文件,以獲取列表中的每個點的現值,然後創建一個變量,它是該點的名稱,將其設置爲「當前值「字段。然後,我可以使用這樣的HTML頁面上的PHP變量參考點:
<?php echo "$SEA_SRV_SEA_SV1_01_EXHT";?>
我開始用下面的代碼,但它不工作。
<?php
// Parse the settings file
$bacnetini = parse_ini_file('/var/www/config/bacnet.ini');
// Parse the keys to variables and add data
foreach ($bacnetini as $key => $value) {
$url = $value;
$json = file_get_contents($url);
$json_data = json_decode($json, true);
$$key = $json_data;
}
?>
我很想得到一些其他意見,因爲我不知道該從哪裏出發。
我已經看過了這些其他堆棧溢出的問題,但我不知道如何讓所有的東西都合在一起。
使用可變的變量,比如$$ key'很少是個好主意,因爲你不知道他們可能沒有通過'$ bacnetini'鍵再次循環被稱爲....何不乾脆建數組? –
謝謝馬克。我怎樣才能使用數組呢?你能詳細解釋一下嗎? –
在循環之前將數組定義爲空數組('$ bacnetData = [];');使用'$ bacnetData [$ key] = $ json_data;'而不是'$$ key = $ json_data;''填充該數組;'';並使用'<?php echo $ bacnetData ['SEA_SRV_SEA_SV1_01_EXHT']「;」>? –