Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用变量从PHP中的XML获取数据_Php_Xml_Variables_Simplexml - Fatal编程技术网

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

使用变量从PHP中的XML获取数据,php,xml,variables,simplexml,Php,Xml,Variables,Simplexml,我今天开始把XML和PHP混合在一起,我在这方面做得很差,尽管它看起来非常简单 现在,我正在尝试做一些听起来很简单的事情,但我不明白它是如何工作的。我基本上是在为游戏创建一个假邮箱 因此,我将电子邮件存储在一个XML文件中,按类别(接收、发送等)分类。我根据邮件的类别找到了邮件列表,但我无法找到我点击邮件的部分,它显示了这封邮件的内容 以下是我的简化代码: XML: 但当然,我希望这部分是动态的,它不适用于: echo $emails->$cat[$id]->content; 有

我今天开始把XML和PHP混合在一起,我在这方面做得很差,尽管它看起来非常简单

现在,我正在尝试做一些听起来很简单的事情,但我不明白它是如何工作的。我基本上是在为游戏创建一个假邮箱

因此,我将电子邮件存储在一个XML文件中,按类别(接收、发送等)分类。我根据邮件的类别找到了邮件列表,但我无法找到我点击邮件的部分,它显示了这封邮件的内容

以下是我的简化代码:

XML:

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

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
}
您可以在

上在线查看,请尝试以下操作:

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

您可以在

Hi Alex在线查看,谢谢您的快速回答!不幸的是,它仍然不起作用,我真的不明白<代码>如果(isset($emails->{$cat}[$id]){echo$emails->{$cat}[$id]->contenu;}否则echo“电子邮件不存在。”…返回“电子邮件不存在”。如果我将
{$cat}[$id]
替换为
received[1]
,我会收到我的电子邮件。我试图打印
$cat.['.$id.]'
以仔细检查我是否愚蠢,它会按原样返回“received[1]”。我的php版本设置为5.6。有什么想法吗?好吧,我发现了一些。要工作,
$id=(int)“1”,与字符串
“1”
一样,它不起作用。所以只要做
$id=(int)$id如果(isset($emails->{$cat}[$id]){echo$emails->{$cat}[$id]->contenu;}否则echo“电子邮件不存在。”…返回“电子邮件不存在”。如果我将
{$cat}[$id]
替换为
received[1]
,我会收到我的电子邮件。我试图打印
$cat.['.$id.]'
以仔细检查我是否愚蠢,它会按原样返回“received[1]”。我的php版本设置为5.6。有什么想法吗?好吧,我发现了一些。要工作,
$id=(int)“1”,与字符串
“1”
一样,它不起作用。所以只要做
$id=(int)$id