2016-12-24 22 views
0

PHP parse_ini_fileを実行するモジュラーコードを作成する方法をいくつか入力し、返された値を使用してJSONデコードを実行します。PHPを使用してINIファイルを解析し、JSON_DECODEを実行します

オートメーションシステムのBACnetポイント用のJSON構造を返すBACnet APIがあります。 JSONデータをデコードして「現在値」フィールドだけを返し、Webページに値を表示する次のコードを書きました。

<?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"; 
;?> 

これはうまくいきますが、私はこのコードをモジュール化して他の多くの点で使用できるようにしたいと考えています。

私は、他のポイントのリストとAPIのJSONデータを含むURLのリストを含むINIファイルを作成しました。私は何をしたいのですが、リスト内の各点の現在値を取得し、ポイントの名前で変数を作成し、「現在に等しく、それを設定するには、INIファイルを使用している

## 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 

「値」フィールド。次に、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; 
} 

?> 

私はここからどこに行くのかわからないので、これを達成するための最善の方法についていくつかの意見を頂きたいと思います。

私はこれらの他のスタックオーバーフローに関する質問を見てきましたが、どのように一緒に収まるかを知る方法はわかりません。

+0

配列? –

+0

ありがとうございました。代わりに配列を使用する方法はありますか?もっと詳しく説明できますか? –

+0

ループの前に配列を空の配列として定義します( '$ bacnetData = [];'); '$$ key = $ json_data;の代わりに' $ bacnetData [$ key] = $ json_data; '<?php echo $ bacnetData [' SEA_SRV_SEA_SV1_01_EXHT '] ";?>' –

答えて

0

代わりにこのような何かをしようとしないのはなぜ?これにより、スクリプトに影響を与えない他のセクションをINIファイルに作成することができます。なぜ単純にビルドしていない....あなたは、彼らが再び `$のbacnetini`のキーをループせずに呼ばれるかもしれないものを見当がつかないので、` $$ key`は、めったに良いアイデアではありませんのような変数の変数を使用して

<?php 

$bacnetini = parse_ini_file('/var/www/config/bacnet.ini', true); 

$data = array(); 

foreach ($bacnetini['bacnet'] as $key => $url) { 
    $data[$key] = json_decode(file_get_contents($url), true); 
} 

var_dump($data['SEA_SRV_SEA_SV1_01_EXHT']); 

?> 
+0

これは機能しますが、APIからのすべてのJSONデータを返します。 –

+0

" present-value "フィールドを返す方法はありますかJSONデータ? –

+0

ダンプに "present-value"インデックスを追加しました: 'var_dump($ data ['SEA_SRV_SEA_SV1_01_EXHT'] ['present-value']);' –

関連する問題