用PHP阅读Yaml

Joã*_*mos 6 html 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.
Run Code Online (Sandbox Code Playgroud)

当新玩家连接到服务器进行播放时,此文件会自动创建一个这样的新段落(这是一个新玩家):

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

对于播放器成为管理员,例如,其中一个管理员,输入以下命令:/ manuadd(播放器名称)管理员,它将自动编辑users.yml

在我们的网站上,在主页上,我们希望在一个方框中显示最重要的组(帮助者和管理员),就像这个简单的HTML代码:

<h1>Staff</h1>
    <h2>Administrators</h2>
        <p>Angelow98</p>
        <p>JamesMarch</p>
    <h2>Helper</h2>
        <p>iDatSnoow_</p>
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*igt 7

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

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

现在分析您的示例,我<<<<用有效的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.');
Run Code Online (Sandbox Code Playgroud)

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

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

$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_
                        )
                )
        )
)
Run Code Online (Sandbox Code Playgroud)

如果将该数组传递给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; ?>
Run Code Online (Sandbox Code Playgroud)