PHP: 从嵌套的 foreach 循环中获取数组
PHP: Get array from nested foreach loops
我正在尝试从 rss 提要中获取项目,以便在我的博客上显示它们。出于某种原因,当我 print_r 一个数组在 foreach 循环之外时,它只显示一个项目而不是应该存在的两个项目。
我的 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
)
)
有人能告诉我为什么它只给我一个结果并告诉我如何让它们在 [第二步] 中输出吗?
谢谢
你的问题是你正在使用 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";
}
}
[site] 数组中必须有一个多维数组。现在只有一维了。
数组键必须是唯一的。因为如果您两次使用同一个键,它将覆盖该键的先前值。这就是为什么 [第二步] 只给你一个结果。
多维数组当然是一种选择。
$arr_postContent[]['site'] = $postContent;
你的问题出在哪里:$arr_postContent['site'] = $postContent;
它在循环内输出正常,因为你每次都在打印它。一旦它在循环之外,'site' 数组键将重置为输出的第一个值,因为第二个(内部)循环在最后一个 运行 通过时停止。您将必须有一个动态数组键来按照您的预期方式保留所有值。
在不知道您输入的情况下 values/format 我无法告诉您这是否是一个明确的答案。但是浏览代码,我相信这就是正在发生的事情。希望这对您有所帮助!
我正在尝试从 rss 提要中获取项目,以便在我的博客上显示它们。出于某种原因,当我 print_r 一个数组在 foreach 循环之外时,它只显示一个项目而不是应该存在的两个项目。
我的 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
)
)
有人能告诉我为什么它只给我一个结果并告诉我如何让它们在 [第二步] 中输出吗?
谢谢
你的问题是你正在使用 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";
}
}
[site] 数组中必须有一个多维数组。现在只有一维了。
数组键必须是唯一的。因为如果您两次使用同一个键,它将覆盖该键的先前值。这就是为什么 [第二步] 只给你一个结果。
多维数组当然是一种选择。
$arr_postContent[]['site'] = $postContent;
你的问题出在哪里:$arr_postContent['site'] = $postContent;
它在循环内输出正常,因为你每次都在打印它。一旦它在循环之外,'site' 数组键将重置为输出的第一个值,因为第二个(内部)循环在最后一个 运行 通过时停止。您将必须有一个动态数组键来按照您的预期方式保留所有值。
在不知道您输入的情况下 values/format 我无法告诉您这是否是一个明确的答案。但是浏览代码,我相信这就是正在发生的事情。希望这对您有所帮助!