带有变量的 php foreach

标签 php foreach simplexml

我尝试在 foreach 循环中使用变量(使用 simplexml),但对如何使其正常工作感到困惑。

我的变量是:

$path="channel->item";

我希望我的 foreach 看起来像:

foreach ($xml->".$path." as $newsItem)

但这不起作用 - 就像 $path 被回显为 $path 而不是它的内容。

如果我这样做:

foreach ($xml->channel->item as $newsItem) 

效果很好。
我确信这只是一个语法问题,但我无法弄清楚。提前致谢。

最佳答案

变量中不能包含指针。

$members = explode('->', $path);
foreach($xml->{$members[0]}->{$members[1]} as $v) {

}

只有当您的路径保持二维时,这才有效。
[编辑] 如果您确实需要它递归地工作,您可以使用它。抱歉花了我一分钟时间来写:

function pathFinder($path, $obj) {
    $members = explode('->', $path);

    if(is_object($obj) && count($members) && property_exists($obj, $members[0])) {
        $nextMember = $members[0];
        array_shift($members);
        return pathFinder(implode('->', $members), $obj->{$nextMember});
    } else {
        return $obj;
    }
}

$xml = new stdClass;
$xml->channel->item[] = 'love';
$xml->channel->item[] = 'test';

$path = 'channel->item';
$array = pathFinder($path, $xml);
print_r($array);

输出:

Array(
    [0] => love
    [1] => test
)

关于带有变量的 php foreach,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31613814/

相关文章:

php - 我的注册表中存在语法错误

php - 将检索到的数据库记录传递给 php 文件

java - Java 8 Stream 中的 forEach 与 forEachOrdered

javascript - foreach 循环中的自定义输入数字

php - 关于在php中保存文件的问题

php - CodeIgniter Active Records 在子查询中的位置

php - 拉维尔 5 : Is there a non-case sensitive way to sort a collection by an attribute?

PHP range & foreach,使用当前值? (WordPress)

xml - 使用 DOMDocument 的简单 xml 文档中的 & 符号

PHP SimpleXML 换行