0

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

4 回答 4

3

您可能正在寻找一种从字符串中获取对象属性的方法,方法如下:

$instance->{$var.'string-part'.$otherVar};

在你的情况下,那将是:

echo $info->{'rule'.$i};

有关更多详细信息,请参阅有关变量 variables 的手册页。尤其是标题为“#1 变量属性”的部分您应该会感兴趣...
但是由于您在<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>';
    }
}

鉴于您提供的信息,这是做您正在做的事情的最简单方法......

于 2013-09-18T08:05:11.507 回答
2

试试这个代码“for”:

for($i=1; $i < count($info); $i++)
{
    $rule = $info->{'rule'.$i};
    echo $rule;
}
于 2013-09-18T08:01:22.367 回答
1

试试这个:

$rule = $info->{rule.$i};
于 2013-09-18T08:03:44.407 回答
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>";
于 2013-09-18T08:05:14.023 回答