【问题标题】:Reading Yaml with PHP [closed]用 PHP 读取 Yaml [关闭]
【发布时间】:2016-07-22 19:23:38
【问题描述】:

有人知道我如何用 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 (player name) Admin,它会自动在users.yml中编辑

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

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

总之,我们想要的是它自动运行。也就是说,当某人成为管理员时,PHP Reader 将读取 YAML 代码并打印到网站上,就像上面的 HTML 代码一样。

【问题讨论】:

    标签: php html yaml


    【解决方案1】:

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

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

    现在解析您的示例,我将 &lt;&lt;&lt;&lt; 替换为有效的 YAML cmets:

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

    【讨论】:

    • 我不知道如何在我的网站上安装 Symfony...我如何安装?
    • 你不需要所有的 Symfony,只需要 Yaml 库。现在最好的做法是通过 Composer 安装 PHP 库:getcomposer.org 一旦设置好,一个简单的composer require symfony/yaml 将下载它并通过 Composer 的自动加载器使其可用。无论如何,这超出了这个问题的范围,所以如果你不能让它工作,请在 SO 上创建一个新问题。
    • 它给了我这个错误:Parse error: syntax error, unexpected 'a11' (T_STRING), expecting ']' in /home/u471174751/public_html/staff.php on line 38 line 38 is this : [80679a11-1d47-3a0e-8346-4790ee4304fc] => 数组
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-12
    • 2011-11-20
    • 1970-01-01
    相关资源
    最近更新 更多