使用变量从 PHP 中的 XML 获取数据
Get data from XML in PHP with a variable
我今天开始将 XML 与 PHP 混合使用,虽然看起来非常简单,但我很不擅长。
现在,我正在尝试做一些听起来很简单但我不明白它是如何工作的东西。我基本上是在尝试为游戏创建一个假邮箱。
所以我将我的电子邮件存储在一个 XML 文件中,按类别分类(收到、发送等)。我设法根据类别获取了电子邮件列表,但我无法进入点击电子邮件的部分,它显示了这封特定电子邮件的内容。
这是我的简化代码:
XML :
<mailbox>
<received>
<expediter>James</expediter>
<content>Blah blah blah</content>
</received>
<received>
<expediter>Paul</expediter>
<content>Bluh bluh bluh</content>
</received>
<sent>
<expediter>Jack</expediter>
<content>Blah blah blah</content>
</sent>
<sent>
<expediter>John</expediter>
<content>Bluh bluh bluh</content>
</sent>
</mailbox>
XML;
?>
PHP :
<?php
include 'emails.php';
$emails = new SimpleXMLElement($xmlstr);
$cat = $_GET['cat'];
if(!isset($_GET['id'])){
$i = 0;
foreach($emails->$cat as $mailbox){
echo '<a href="?page=mailbox&cat='.$cat.'&id='.$i.'">'.$mailbox->expediter.'</a><br />';
$i++;
}
}
else{
$id = $_GET['id'];
echo $emails->$cat[$id]->content;
}
?>
因此,如果 url 中没有 ID,它会显示带有电子邮件链接的加急人员列表,如果 url 中有 ID,它应该显示的内容这个号码设计的邮箱。
如果我手动写就可以了:
echo $emails->received[1]->content;
但当然,我希望那部分是动态的,它不适用于:
echo $emails->$cat[$id]->content;
有什么办法吗?
谢谢!
卡米尔
试试这个:
$a = new stdClass();
$b = new stdClass();
$b->field = 5;
$a->list = array(
1 => $b
);
print_r($a);
$param = 'list';
$id = 1;
print_r($a->list[1]->field); // outputs 5;
print_r($a->{$param}[$id]->field); // outputs 5;
关键是:
$a->{$param}[$id]->field // notice the curly brackets.
适应你的问题,你应该使用:
echo $emails->{$cat}[$id]->contenu;
作为一种好的做法,您可能需要先检查它是否存在:
if(isset($emails->{$cat}[$id])){
// echo it here, after you know it exists
}
您可以在 3v4l example
在线查看
我今天开始将 XML 与 PHP 混合使用,虽然看起来非常简单,但我很不擅长。
现在,我正在尝试做一些听起来很简单但我不明白它是如何工作的东西。我基本上是在尝试为游戏创建一个假邮箱。
所以我将我的电子邮件存储在一个 XML 文件中,按类别分类(收到、发送等)。我设法根据类别获取了电子邮件列表,但我无法进入点击电子邮件的部分,它显示了这封特定电子邮件的内容。
这是我的简化代码:
XML :
<mailbox>
<received>
<expediter>James</expediter>
<content>Blah blah blah</content>
</received>
<received>
<expediter>Paul</expediter>
<content>Bluh bluh bluh</content>
</received>
<sent>
<expediter>Jack</expediter>
<content>Blah blah blah</content>
</sent>
<sent>
<expediter>John</expediter>
<content>Bluh bluh bluh</content>
</sent>
</mailbox>
XML;
?>
PHP :
<?php
include 'emails.php';
$emails = new SimpleXMLElement($xmlstr);
$cat = $_GET['cat'];
if(!isset($_GET['id'])){
$i = 0;
foreach($emails->$cat as $mailbox){
echo '<a href="?page=mailbox&cat='.$cat.'&id='.$i.'">'.$mailbox->expediter.'</a><br />';
$i++;
}
}
else{
$id = $_GET['id'];
echo $emails->$cat[$id]->content;
}
?>
因此,如果 url 中没有 ID,它会显示带有电子邮件链接的加急人员列表,如果 url 中有 ID,它应该显示的内容这个号码设计的邮箱。
如果我手动写就可以了:
echo $emails->received[1]->content;
但当然,我希望那部分是动态的,它不适用于:
echo $emails->$cat[$id]->content;
有什么办法吗?
谢谢!
卡米尔
试试这个:
$a = new stdClass();
$b = new stdClass();
$b->field = 5;
$a->list = array(
1 => $b
);
print_r($a);
$param = 'list';
$id = 1;
print_r($a->list[1]->field); // outputs 5;
print_r($a->{$param}[$id]->field); // outputs 5;
关键是:
$a->{$param}[$id]->field // notice the curly brackets.
适应你的问题,你应该使用:
echo $emails->{$cat}[$id]->contenu;
作为一种好的做法,您可能需要先检查它是否存在:
if(isset($emails->{$cat}[$id])){
// echo it here, after you know it exists
}
您可以在 3v4l example
在线查看