PHP数组:从结果集中获取的内容

3

我有一个相当简单的问题,却一直找不到解决方案。我想用mySQL列的内容来填充数组。

基本上我有一个循环来收集结果集,并且我需要从这个结果集中取出特定的列,然后将其放入数组中。

    foreach ($results as $row){

      $names = array();

      $names[] = $row['name'];

    };
假设结果集中有40个名称,它们现在都应该在$names数组中,但是当我尝试在屏幕上打印内容时,我只获得了最后一个结果。
    echo $names[0]; or print_r($names);
我还尝试过以下方法:
    while($row = mysql_fetch_array($results)) {

       $names[] = $row['name']; 

    }

然而,我已经设置并且正在使用foreach循环,所以我不想再引入另一个循环来填充数组。

我知道查询和循环都在工作,因为我可以通过放置以下内容直接回显每个名称的值:

    echo $row['name'] 

在循环中,看到结果名称打印在屏幕上。


在您的第一个示例中,您正在每次循环迭代时重置数组,因此您只会将从DB检索到的最后一条记录存储在其中。初始化必须在循环外完成。 - Marc B
4个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
5

尝试

$names = array();
foreach ($results as $row){
      $names[] = $row['name'];
}
在每个循环中,您都会重新声明$names为一个空数组,并删除您添加到其中的项目。

这肯定是你的问题。每次重新循环时,$names数组都会被清空;如果将其放在循环外面,就不会再发生这种情况了。 - Hope4You

3
$names = array();
foreach ($results as $row){
    $names[] = $row['name'];
};

你的问题在于每次循环结果集时,$names = array(); 都会声明一个新的数组。


3

您正在通过在循环内部初始化数组值来覆盖每个值。以下代码将正常工作:

$names = array(); //Outside
foreach ($results as $row){
      $names[] = $row['name'];
}
否则,在第一次迭代时,您会推动它,并在接下来的迭代中一遍又一遍地清除它。

0

如果是那样的话,他将获得任何数据,而不仅仅是最终值。 - andrewsi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,