组合代码,使它们正确地相互连接


Combining code so that they properly connect with eachother

我正在尝试组合

<?php
$names = $xml->xpath("/server/game/players/player[disconnect_time = '']/name");
$connect_times = $xml->xpath("/server/game/players/player[disconnect_time = '']/connect_time");
?>

<?php
foreach ($names as $name)
{
   echo $name . "<br />";
}
foreach ($connect_times as $connect_time)
{
   echo $connect_time . "<br />";
}
?>

使它们相互连接,如:

$name1 - $connect_time1
$name2 - $connect_time2
$name3 - $connect_time3

但是现在它只是按顺序回显出来,就像

美元name1
美元name2
美元name3
美元connect_time1
美元connect_time2
美元connect_time3

我不太擅长使用foreach -所以我希望在这里得到一些指导。保持xpath很重要,因为我只想显示disconnect_time为空的玩家,因为这意味着他们仍在游戏中。(XML存储最近的玩家一段时间)

提前非常感谢!

编辑:哦!有可能在connect_time中添加一个小时吗?它比应该显示的时间晚了一个小时。我有这段代码-但是再一次,不知道如何将它与其他代码结合起来…

$connect_time = date("Y-m-d H:i",strtotime("+1 hour",strtotime($name)));
$first  = new DateTime("now");
$second = new DateTime($connect_time);
$diff = $first->diff( $second );

编辑2:添加XML的内容以进一步帮助获得解决方案。谢谢你的帮助!

<server>
   <game>
      <players>
         <player>
            <name>Player 1</name>
            <connect_time>2014-03-15 09:05</connect_time>
            <disconnect_time/>
         </player>
         <player>
            <name>Player 2</name>
            <connect_time>2014-03-15 09:21</connect_time>
            <disconnect_time>2014-03-15 09:58</disconnect_time>
         </player>
         <player>
            <name>Player 3</name>
            <connect_time>2014-03-15 09:39</connect_time>
            <disconnect_time/>
         </player>
         <player>
            <name>Player 4</name>
            <connect_time>2014-03-15 09:50</connect_time>
            <disconnect_time>2014-03-15 10:00</disconnect_time>
         </player>
      </players>
   </game>
</server>

IMO,解决方案是选择<player> -节点并访问foreach内部的子节点:

$players = $xml->xpath("/server/game/players/player[disconnect_time = '']");
foreach ($players as $player) {
    echo $player->name . " - " . date("Y-m-d H:i", strtotime($player->connect_time) + 3600) . PHP_EOL;
}