2013-04-09 71 views
0

我在我的文档的开始处有一个foreach循环,它从数组中提取数据并设置稍后使用的一些变量。假设对于这个例子,$foo具有10个阵列其中密钥为IDName通过两个相同的foreach循环传递变量

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

您的第一个循环是简单地创建两个瓦尔的标识和名称,并覆盖值每次迭代 – 2013-04-09 14:50:50

回答

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; 
} 

但是,这是完全不必要的

+0

我认为这个问题是他想创造新的变量,但他只是覆盖它们,你的例子只是打印他们的价值...如果我是正确的... – Matija 2013-04-09 14:52:58

+0

我想设置变量,然后在稍后的文档中调用它们。我试图避免在整个文档中创建5个相同的循环。一个循环将得到只是id和名称,另一个会得到一张照片和标题,另一个循环会显示一个帖子和时间戳。 – Ryan 2013-04-09 14:54:30

+0

@Ryan查看编辑 – 2013-04-09 14:56:27

0

你的意思是要显示所有的ID,那么所有的名字? 如果是这样,你可以使用下面的例子。

第一个循环是。

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

然后,而不是你可以使用的第二个循环。

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