使用变量从 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 示例中在线查看它