2016-04-03 75 views
3

有人知道我怎么能用php读取yaml文件?我想要的东西就像读者。用PHP读取Yaml

我和我的朋友正在创建一个Minecraft服务器,我们希望将服务器连接到站点。为此,我们需要读者阅读我们的服务器文件中的YAML文件。此文件调用users.yml里和里面出下一码:

users: 
     80679a11-1d47-3a0e-8346-4790ee4304fc:  <<<< Player Code. 
     group: 
     - Admin         <<<< Player Group. 
     options: 
      name: JamesMarch      <<<< Player Nick Name. 
     56874a35-8f52-5f2c-7843-7788je9670tb:  <<<< Player Code. 
     group: 
     - Admin         <<<< Player Group. 
     options: 
      name: Angelow98      <<<< Player Nick Name. 
     55026444-cb34-3a27-a270-d7d07fccca0a:  <<<< Player Code. 
     group: 
     - Helper        <<<< Player Group. 
     options: 
      name: iDatSnoow_      <<<< Player Nick Name. 

当一个新的玩家连接到服务器玩,这个文件会自动创建一个这样的新段落(这是一个新的球员):

84569a84-5d77-3a5e-8547-4720ee4304fc: <<<< Player Code. 
    group: 
    - NewPlayer       <<<< Player Group (NewPlayer is the default group) 
    options: 
     name: mumiant_      <<<< Player Nick Name. 

给玩家成为管理员,例如,管理员之一,具有输入以下命令:/ manuadd(玩家名)管理,它会在users.yml里

在我们的网站自动编辑,在主页上,我们想在一个盒子里展示最重要的gro (帮助者和管理员)喜欢这个简单的HTML代码:

<h1>Staff</h1> 
    <h2>Administrators</h2> 
     <p>Angelow98</p> 
     <p>JamesMarch</p> 
    <h2>Helper</h2> 
     <p>iDatSnoow_</p> 

总之,我们想要的是它自动工作。这是,当有人成为管理员时,PHP阅读器将读取YAML代码,并将在网站上打印,如上面的HTML代码。

回答

2

您可以解析YAML和使用symfony/yaml转储数组YAML:

use Symfony\Component\Yaml\Yaml; 
$yaml = Yaml::parse(file_get_contents('/path/to/file.yml')); 
$yamlString = Yaml::dump($yaml); 

现在来分析你的榜样,我凭有效YAML评论取代了<<<<

$data = \Symfony\Component\Yaml\Yaml::parse('users: 
    80679a11-1d47-3a0e-8346-4790ee4304fc:  # Player Code. 
    group: 
    - Admin         # Player Group. 
    options: 
     name: JamesMarch      # Player Nick Name. 
    56874a35-8f52-5f2c-7843-7788je9670tb:  # Player Code. 
    group: 
    - Admin         # Player Group. 
    options: 
     name: Angelow98      # Player Nick Name. 
    55026444-cb34-3a27-a270-d7d07fccca0a:  # Player Code. 
    group: 
    - Helper        # Player Group. 
    options: 
     name: iDatSnoow_      # Player Nick Name.'); 

现在让我们组所有玩家按他们的第一组分配:

$groups = array(); 
foreach ($data['users'] as $playerCode => $player) { 
    $firstGroupName = $player['group'][0]; 
    $groups[$firstGroupName][$playerCode] = $player; 
} 

$groups现在看起来是这样的:

Array 
(
    [Admin] => Array 
     (
      [80679a11-1d47-3a0e-8346-4790ee4304fc] => Array 
       (
        [group] => Array 
         (
          [0] => Admin 
         ) 
        [options] => Array 
         (
          [name] => JamesMarch 
         ) 
       ) 
      [56874a35-8f52-5f2c-7843-7788je9670tb] => Array 
       (
        [group] => Array 
         (
          [0] => Admin 
         ) 
        [options] => Array 
         (
          [name] => Angelow98 
         ) 
       ) 
     ) 

    [Helper] => Array 
     (
      [55026444-cb34-3a27-a270-d7d07fccca0a] => Array 
       (
        [group] => Array 
         (
          [0] => Helper 
         ) 

        [options] => Array 
         (
          [name] => iDatSnoow_ 
         ) 
       ) 
     ) 
) 

如果传递的数组的PHP模板,你可以实现你的输出是这样的:

<?php foreach($groups as $group => $players): ?> 
<h1><?= $group ?></h1> 
<?php foreach ($players as $playerCode => $player): ?> 
<p><?= $player['options']['name'] ?> </p> 
<?php endforeach; ?> 
<?php endforeach; ?> 
+0

我不知道怎样在我的网站上安装Symfony的。 ..我如何安装? –

+0

你不需要Symfony的全部,只需要Yaml库。现在最好的做法是通过Composer安装PHP库:https://getcomposer.org/ 一旦设置好了,一个简单的'composer require symfony/yaml'就可以下载它并通过Composer的自动加载器使它可用。 无论如何,这是超出了这个问题的范围,所以如果你不能得到它的工作,就SO创建一个新的问题。 –

+0

它给了我这个错误:解析错误:语法错误,意外的'a11'(T_STRING),期待']'38行上的/home/u471174751/public_html/staff.php 行38是这样的:[80679a11-1d47 -3a0e-8346-4790ee4304fc] =>数组 –