【问题标题】:Combining code so that they properly connect with eachother组合代码,使它们正确地相互连接
【发布时间】:2014-04-20 12:39:45
【问题描述】:

我正在尝试合并

<?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 上增加一个小时?它比它应该显示的内容晚了 1 小时。我有这段代码 - 但再一次,不知道如何将它与其他代码结合起来..

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

【问题讨论】:

标签: php xml xpath foreach


【解决方案1】:

IMO,解决方案是选择&lt;player&gt;-node 并在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;

}

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2014-07-31
  • 2019-01-10
  • 2019-03-06
  • 1970-01-01
  • 2013-07-24
  • 2013-08-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多