通过在mySQL数据库中循环创建数组,在PHP中只捕获一次条目

通过在mySQL数据库中循环创建数组,在PHP中只捕获一次条目,php,mysql,arrays,database,Php,Mysql,Arrays,Database,我对编码比较陌生,需要一些帮助。我基本上是尝试在mySQL数据库中循环一个条目,并将任何新条目推送到一个数组中,这样它在我的数组中只出现一次 // SQL query $response = $bdd->query('SELECT serie_bd FROM inventaire_bd'); //creating array to group all elements from the db so that they do not repeat $serie_bd_groupe=ar

我对编码比较陌生,需要一些帮助。我基本上是尝试在mySQL数据库中循环一个条目,并将任何新条目推送到一个数组中,这样它在我的数组中只出现一次

// SQL query 
$response = $bdd->query('SELECT serie_bd FROM inventaire_bd');


//creating array to group all elements from the db so that they do not repeat
$serie_bd_groupe=array();
while($data_collected = $response->fetch())
{   
    if(array_key_exists($data_collected,$serie_bd_groupe)==false)
    {
        array_push($data_collected,$serie_bd_groupe);
    }
}
这行吗似乎循环在第二次访问某个条目后将一直处于停滞状态,因为if语句不会自动执行

同样在将来,他们的php是否等同于jsfiddle.net,以便我可以对代码进行语法测试


感谢您抽出时间

如果您正在从数据库中查找唯一值(serie_bd),请更新您的查询,以包含如下“DISTINCT”:

$bdd->query('SELECT DISTINCT serie_bd FROM inventaire_bd');

另一方面,我认为您正在寻找的是数组键将是默认整数,因此您不想检查它们。与此相反:

if(array_key_exists($data_collected,$serie_bd_groupe)==false)
您应该这样做:

if(!(in_array($data_collected,$serie_bd_groupe)))

另一方面,如果希望收集的数据是数组键而不是值,则可以执行以下操作,而不是数组推送:

$serie_bd_groupe[$data_collected] = 1;  

然后你的密钥检查就可以了。

$data\u collected
是获取数组还是收集器数组?旁白:
数组推送
是一个坏习惯。有一些非常罕见的情况下,你想使用它,但这不是其中之一。只需使用
[]
操作符。@Jon出于好奇,为什么使用
数组推送是个坏习惯?这是因为我们可以简单地使用
[]
操作符吗?我看不出比调用doc所说的函数的开销有什么不同。@code-jaff:它更慢,而且(更重要的)它不是惯用的。每个人都能立即理解
[]
的功能,而
array\u push
需要人工读者“解析”它。手册中说“注意:如果使用array\u push()向数组添加一个元素,最好使用$array[]”