【问题标题】:Get data from XML in PHP with a variable使用变量从 PHP 中的 XML 获取数据
【发布时间】:2016-02-24 04:39:37
【问题描述】:

我今天开始将 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,则显示带有电子邮件链接的 expediters 列表,如果 url 中有 ID,则应显示该编号设计的电子邮件内容。

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

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

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

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

有什么办法吗?

谢谢!

卡米尔

【问题讨论】:

    标签: php xml variables simplexml


    【解决方案1】:

    试试这个:

    $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在线查看

    【讨论】:

    • 嗨,亚历克斯,感谢您的快速回答!不幸的是它仍然不起作用,我真的不明白。 if(isset($emails-&gt;{$cat}[$id])){ echo $emails-&gt;{$cat}[$id]-&gt;contenu; } else echo "The email doesn't exist."; ...返回“电子邮件不存在。”。如果我将{$cat}[$id] 替换为received[1],我会收到我的电子邮件。我尝试打印$cat.'['.$id.']' 以仔细检查我是否不愚蠢,它会返回“received[1]”。我的php版本设置为5.6。有什么想法吗?
    • 好吧,我找到了一些东西。 3v4l.org/KPfgR。要工作,$id = (int)"1";,与字符串 "1" 一样,它不起作用。所以就这样做$id = (int)$id;
    猜你喜欢
    • 2012-04-17
    • 1970-01-01
    • 1970-01-01
    • 2016-06-15
    • 1970-01-01
    • 1970-01-01
    • 2018-10-24
    • 1970-01-01
    • 2011-09-03
    相关资源
    最近更新 更多