我有一个想要回显到浏览器的xml文件
echo $rule = $info->rule1
echo $rule = $info->rule2
结果:
示例1
示例2
因为xml中的规则是动态的,我想计算有多少规则并将该变量传递给“规则”
$xml = simplexml_load_file('file.xml');
$xml_nested = $xml->monthlegenda;
echo "<ul>";
foreach ($xml_nested as $info):
for($i=1; $i < count($info); $i++){
$rule = $info->rule;
$rule .= $i;
echo $rule;
};
endforeach;
echo "</ul>";
结果我期待:
示例1
示例2
但是我明白了 12
答案 0 :(得分:3)
你可能正在寻找一种从字符串中获取对象属性的方法,这样做是这样的:
$instance->{$var.'string-part'.$otherVar};
在你的情况下,那就是:
echo $info->{'rule'.$i};
有关详细信息,请参阅the man pages on variable variables。特别是“em>”#1 Variable property“这一部分应该引起您的兴趣...
但是由于你在循环之前和之后回显了<ul>
标签,我假设你正在尝试创建一个列表,在这种情况下,你的echo语句应该如下所示:
echo '<li>', $info->{'rule'.$i}, '</li>';//comma's not dots!
请注意,由于$info
循环,您永远不会遍历整个for
对象。你应该写:
for ($i=1,$j = count($info);$i<=$j;$i++)
{
echo $info->{'rule'.$i};
}
请注意,我正在为变量分配count($info)
,以避免在每次循环迭代时调用count
。您没有更改对象,因此count
值仍然是常量......或者只是使用foreach
:
foreach($info as $property => $val)
{//val is probably still an object, so use this:
echo $info->{$property};
}
在最后一种情况下,您可以省略$property
周围的曲线,但不推荐这样做,但您可以在此处检查相关属性是否为rule
属性:
foreach($info as $property => $val)
{
if (substr($property, 0, 4) === 'rule')
{//optionally strtolower(substr($property, 0, 4))
echo '<li>', $info->{$property}, '<li>';
}
}
根据您提供的信息,这是做您正在做的事情的最简单方法......
答案 1 :(得分:2)
尝试使用此代码&#34; for&#34;:
for($i=1; $i < count($info); $i++)
{
$rule = $info->{'rule'.$i};
echo $rule;
}
答案 2 :(得分:1)
试试这个:
$rule = $info->{rule.$i};
答案 3 :(得分:0)
检查
$xml = simplexml_load_file('file.xml');
$xml_nested = $xml->monthlegenda;
echo "<ul>";
foreach ($xml_nested as $info)
for($i=1; $i < count($info); $i++){
$rule = "";
$rule = $info->rule;
$rules = $rule.$i;
echo $rules;
}
echo "</ul>";