php 带变量的foreach
php foreach with a variable
我正在尝试在 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
)
尝试这样的事情:
#Object for test
$xml = new stdClass();
$xml->channel->item[] = "banana";
$xml->channel->item[] = "abacate";
$xml->channel->item[] = "manga";
$xml->channel->item[] = "abacaxi";
$xml->channel->item[] = "morango";
list($channel, $item)= explode('->','channel->item');
foreach ($xml->{$channel}->{$item} as $newsItem) :
var_dump($newsItem);
endforeach;
我正在尝试在 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
)
尝试这样的事情:
#Object for test
$xml = new stdClass();
$xml->channel->item[] = "banana";
$xml->channel->item[] = "abacate";
$xml->channel->item[] = "manga";
$xml->channel->item[] = "abacaxi";
$xml->channel->item[] = "morango";
list($channel, $item)= explode('->','channel->item');
foreach ($xml->{$channel}->{$item} as $newsItem) :
var_dump($newsItem);
endforeach;