使用变量从PHP中获取XML数据

时间:2016-02-23 18:36:28

标签: php xml variables simplexml

我今天开始将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;
    }
?>

因此,如果网址中没有ID,则会显示包含电子邮件链接的加急人员列表,如果网址中有ID,则应显示由此编号设计的电子邮件内容。

如果我手动编写,它会起作用:

echo $emails->received[1]->content;

但是,当然,我希望那部分是动态的,它不适用于:

echo $emails->$cat[$id]->content;

有没有办法做到这一点?

谢谢!

卡米尔

1 个答案:

答案 0 :(得分:0)

试试这个:

$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

在线查看