【问题标题】:for loop append variable phpfor循环追加变量php
【发布时间】:2013-09-22 21:20:38
【问题描述】:

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

【问题讨论】:

  • 请同时发布您的 XML。
  • 我认为你的解析错误显示你的 XML

标签: php xml parsing for-loop


【解决方案1】:

试试这个代码“for”:

for($i=1; $i < count($info); $i++)
{
    $rule = $info->{'rule'.$i};
    echo $rule;
}

【讨论】:

  • 这段代码有一个问题:您不会循环遍历$info 的所有属性(最后一个将被跳过),并且您在每次迭代时都调用count。详情请查看我的答案...
  • 这行得通,谢谢!但是我如何确保我得到所有的“规则”,因为我计算了所有的孩子我必须为那些不是“规则”的孩子“删除计数”跨度>
  • @MichaelAngelo:将答案添加到我的答案底部(通过使用foreach 循环:对象可以使用foreach 进行迭代)
【解决方案2】:

试试这个:

$rule = $info->{rule.$i};

【讨论】:

    【解决方案3】:

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

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

    在你的情况下,那就是:

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

    更多详情,请参阅the man pages on variable variables。尤其是标题为“#1 变量属性” 的部分您应该会感兴趣...
    但是由于您在循环之前和之后回显&lt;ul&gt; 标签,我假设您正在尝试创建一个列表,在这种情况下,您的回显语句应该如下所示:

    echo '<li>', $info->{'rule'.$i}, '</li>';//comma's not dots!
    

    请注意,由于您的 for 循环,您永远不会遍历整个 $info 对象。你应该写:

    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>';
        }
    }
    

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

    【讨论】:

    • 第一个解决方案确实显示了每个条目,我尝试了 foreach 但它是否嵌套在 for 循环中,因为它不检查所有规则
    • @MichaelAngelo:设置一个 pastebin,或者在你的问题中添加 foreach 代码,这样我就可以看到你在做什么,但是使用 foreach,你不需要 for再循环。 foreach 替换了 for 循环,但它仍然 “嵌套”foreach($xml_nested as $info) 循环内
    【解决方案4】:

    检查一下

    $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>";
    

    【讨论】:

    • 不,这不会有什么不同,因为$rule 在下一条语句中被$info-&gt;rule; 覆盖。
    猜你喜欢
    • 2018-01-19
    • 2018-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-09
    • 2019-03-09
    • 2016-11-30
    • 2017-10-12
    相关资源
    最近更新 更多