将PHP字符串解释为变量

时间:2011-07-05 22:58:00

标签: php xml

我有一大堆字符串,如下所示:

$xml->archdesc->accessrestrict->p

这些字符串表示XML文档中的可能项。 “$ xml”是我使用simplexml_load_file()读取XML文件时创建的对象(SimpleXMLElement)的简写。

我怎样才能将这些解释为变量?我想访问文档中存在的每个字符串的值,但我似乎无法实现这一点。我尝试过使用$$格式,$ {}格式,eval()等等,但似乎没有给我变量的内容;他们只是将我的字符串显示为字符串。

这些不适用于使用对象运算符的东西吗?我是否必须以某种方式逃避这些?我缺少什么?

5 个答案:

答案 0 :(得分:2)

您可以将阵列更改为xpath位置吗?

$xml = new SimpleXMLElement("<?xml version=\"1.0\" encoding=\"utf-8\" ?><root><foo><bar>foobar</bar></foo><baz><boo>bazboo</boo></baz></root>");
$array = array('foo/bar', 'baz/boo');

foreach ($array as $xpath) { 
    $xpathResult = $xml->xpath($xpath);
    echo $xpathResult[0]."\n";
}

虽然我绝对更喜欢上述解决方案,但您可以保留现有数组并使用eval()(并阅读When is eval evil in php?

$xml = new SimpleXMLElement("<?xml version=\"1.0\" encoding=\"utf-8\" ?><root><foo><bar>foobar</bar></foo><baz><boo>bazboo</boo></baz></root>");
$array = array('$xml->foo->bar', '$xml->baz->boo');
foreach ($array as $xpath) { 
    echo eval("return $xpath;");
}

答案 1 :(得分:0)

eval适合我。

测试代码:

$blah = new stdClass();
$blah->hello = 'hello';
$foo = '$blah->hello';
eval('echo '.$foo.';');

答案 2 :(得分:0)

你也可以使用变量来实现这一点:

$blah = new stdClass();
$blah->hello = 'hello';
$foo = 'blah->hello';
$bar = explode('->', $foo);
echo $$bar[0]->$bar[1];

请注意,您必须先剪掉字符串的美元符号才能以这种方式使用它。

答案 3 :(得分:0)

不需要其他答案所建议的eval。只需执行以下操作:

<?
$x = 'hello';
$y = new StdClass;
$z = 'y';
$y->hello = 'wes';
print $y->$x;
print $z->$x;
?>

答案 4 :(得分:0)

解决了 - 我自己的愚蠢错误;我在另一个位置重置$ xml var,从而否定了我对SimpleXML对象的使用,加上我的eval()语法有点偏。愚蠢的错误,与我的问题完全无关。对不起。