for loop追加变量php

时间:2013-09-18 07:57:24

标签: php xml parsing for-loop

我有一个想要回显到浏览器的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

4 个答案:

答案 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>";