-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'];

和第二区域值

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

如果 ['WorkArea'] AND ['caylyn55'] 动态,您可以使用此代码

$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 回答