我正在尝试从rss提要中获取项目,以便我可以在我的博客上显示它们。出于某种原因,当我在 foreach 循环之外print_r一个数组时,它只显示一个项目,而不是应该存在的两个项目。
我的foreach看起来像这样:
$arr_postContent = array();
foreach ($feed as $row) {
$feedid = $row->id;
$feedurl = $row->blogUrl;
foreach ($rss->getElementsByTagName('item') as $node) {
$item = array (
'title' => $node->getElementsByTagName('title')->item(0)->nodeValue,
'link' => $node->getElementsByTagName('link')->item(0)->nodeValue,
);
$postContent = array('link' => $item['link'], 'title' => $item['title']);
$arr_postContent['site'] = $postContent;
}
[ STEP ONE ]
}
[ STEP TWO ]
在我放置[步骤一]和[步骤二]的地方,我放置了代码:
echo '<pre>';
print_r($arr_postContent);
echo '</pre>';
[ 第一步 ] 给我 :
Array
(
[site] => Array
(
[link] => siteurl1
[title] => site title1
)
)
Array
(
[site] => Array
(
[link] => siteurl2
[title] => site title2
)
)
[ 第二步 ] 给我:
Array
(
[site] => Array
(
[link] => siteurl1
[title] => site title1
)
)
有人可以告诉我为什么它只给我一个结果,并告诉我如何让它们在 [ 第二步 ] 中输出?
谢谢
数组键必须是唯一的。 因为如果您两次使用相同的键,它将覆盖该键的先前值。 这就是为什么[第二步]只给你一个结果。
多维数组肯定是一种选择。
$arr_postContent[]['site'] = $postContent;
[site] 数组中必须有一个多维数组。现在它只是一个维度。
你的问题是你正在使用item(0)
/* foreach example 4: multi-dimensional arrays */
$a = array();
$a[0][0] = "a";
$a[0][1] = "b";
$a[1][0] = "y";
$a[1][1] = "z";
foreach ($a as $v1) {
foreach ($v1 as $v2) {
echo "$v2'n";
}
}
你的问题出在哪里: $arr_postContent['site'] = $postContent;
它在循环内输出正常,因为您每次都打印它。一旦它位于循环之外,"site"数组键将重置为输出的第一个值,因为第二个(内部)循环在最后一次运行时停止。您必须有一个动态数组键才能按预期方式保留所有值。
在不知道您的输入值/格式的情况下,我无法告诉您这是否是一个明确的答案。但是浏览代码,这就是我相信正在发生的事情。希望这有帮助!