2016-04-03 107 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] =>數組 –