-1

配列に解析する必要があるyamlファイルがあり、それを完了しました。今、この配列は巨大です。いくつかの値のみが必要です...

X1、Y1、X2、Y2、所有者、それだけでいいのです。それらを配列にうまく吐き出すことができれば、それは私にとって世界を意味します. (所有者は、これらの X1、y1、x2、y2 値に関連する所有者でなければなりません...

(それらはすべて互いに関連しています)配列には多くのx1、y1がありますが、それらはすべて見出しの下にあります...など、それらすべてを取得する方法がわかりません...

配列が吐き出すものを次に示します...(ファイルサイズの制限により短縮されています) http://pastebin.com/PyH18mZv

どんな助けでも大歓迎です。

4

3 に答える 3

2

YAML を解析するには、利用可能なさまざまな PHP パーサーを使用できます。Online YAML Parserを使用して YAML を解析し、JSON で文字列を出力しました。最後に、JSON をデコードすることで、必要な配列値にアクセスできます。

* 例として、ストリングを短くカットしていることに注意してください *

$arr='{
"Residences": {
"WorkArea": {"BlackList": {"Type": "BLACKLIST", "ItemList": []}, 
  "EnterMessage": "Welcome %player to %residence, owned by %owner.", 
  "Areas": {
    "main": {
      "Y1": 217, 
      "X1": -6301, 
      "X2": -6306, 
      "Y2": 205, 
      "Z1": 3001, 
      "Z2": 2981
    }
  }, 
  "Permissions": {"Owner": "cal9897","World": "VivaWorld"}
}, 
"caylyn55": {
  "BlackList": {
    "Type": "BLACKLIST", 
    "ItemList": []
  }, 
  "EnterMessage": "Welcome %player to %residence, owned by %owner.", 
  "StoredMoney": 0, 
  "IgnoreList": {
    "Type": "IGNORELIST", 
    "ItemList": []
  }, 
  "LeaveMessage": "Now leaving %residence.", 
  "Subzones": {}, 
  "Areas": {
    "main": {
      "Y1": 67, 
      "X1": 1220, 
      "X2": 1210, 
      "Y2": 64, 
      "Z1": 369, 
      "Z2": 360
    }
  }, 
  "Permissions": {
    "Owner": "caylyn55",
    "PlayerFlags": {}, 
    "GroupFlags": {}, 
    "World": "VivaWorld"
  }
}
}, 
 "Version": 1, 
 "Seed": 1337068141
  }';

JSON のデコード

$a= json_decode($arr,true);

最初のエリア値が通り抜ける

$a['Residences']['WorkArea']['Areas']['main']['Y1'];

および 2 番目の面積値

$a['Residences']['caylyn55']['Areas']['main']['Y1'];  

['WorkArea'] AND ['caylyn55'] dynamic の場合、このコードを使用できます

$b=array_values($a);
foreach($b as $values)
{
if(is_array($values)) {

    foreach(array_keys($values) as $c){

     echo  $a['Residences'][$c]['Areas']['main']['Y1'];

        }

    }

}
于 2013-02-15T18:08:07.540 に答える
1

出力しようとしているデータへの完全な参照を追加するだけです。

例:echo $data['Residences']['WorkArea']['Permissions']['Owner'];

于 2013-02-15T16:38:51.383 に答える
0

このようなもの

$extracted = array_map(function ($residence) {
    $r = $residence['Areas']['main'];
    $r['owner'] = $residence['Permissions']['Owner'];
    return $r;
}, $data['Residences']);
于 2013-02-15T16:50:27.590 に答える