通过两个相同的foreach循环传递变量

时间:2013-04-09 14:49:09

标签: php foreach

我在文档的开头有一个foreach循环,它从数组中提取数据并设置一些变量以供稍后使用。让我们说这个示例$foo中包含 10个数组,其中包含IDName的键。

foreach($foo as $bar) {
    $id = $bar['id'];
    $name = $bar['name'];
}

然后,我想要做的是,在我的文档中,我实际上想要为每个$bar显示这些结果,我想这样做。

foreach($foo as $bar) {
    // display all ids
    echo $id;
    // display all names
    echo $name;
}

但我遇到了一个问题。当尝试在第二个foreach循环中显示ID和名称时,它返回10个ID的情况,但ID都是相同的,它是$foo中最后一个数组的ID。

10, 10, 10, 10, 10, 10, 10, 10, 10, 10

如果我在第一个foreach循环中回显$id$name,我会看到所有10个不同的名称和ID。

1,2,3,4,5,6,7,8,9,10

我可以不在同一个阵列上调用第二个foreach循环吗?如果不将所有内容都放入单个foreach循环中,我将如何进行此操作?我想让它保持井井有条,让变量靠近顶部,同时在文档中输出所有内容。

2 个答案:

答案 0 :(得分:0)

虽然为此目的你不需要两个循环,但是假设你这样做,那么你的第二个循环应该看起来像

foreach($foo as $bar) {
$id = $bar['id'];
$name = $bar['name'];
// display all ids
echo $id;
// display all names
echo $name;
}

目前,每次迭代都会为id和name变量赋值,因此在循环结束后你会看到最后的值。

也只是为了参数的缘故,如果你需要分别使用这两个循环,那么你可以在第一个循环中创建一个值数组,并在第二个循环中使用它。但它再次浪费资源,重复一切

$data=array();
foreach($foo as $bar) {
    $data[]["id"] = $bar['id'];
    $data[]["name"] = $bar['name'];
}

然后

foreach($data as $bar) {
$id = $bar['id'];
$name = $bar['name'];

echo $id;
echo $name;
}

但这绝对是不必要的

答案 1 :(得分:0)

你的意思是你想显示所有的ID,然后是所有的名字? 如果是这样,您可以使用以下示例。

第一个循环是。

foreach ($foo as $bar) {
    $ids[] = $bar['id'];
    $names[] = $bar['name'];
}

然后代替你可以使用的第二个循环。

echo explode($ids,",");
echo explode($names,",");