【问题标题】:Creating an array by looping through a mySQL database, capturing entries only once in PHP通过循环遍历 mySQL 数据库创建数组,在 PHP 中只捕获一次条目
【发布时间】:2014-08-30 15:58:31
【问题描述】:

我对编码比较陌生,需要一点帮助。我基本上是在尝试遍历 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,以便我可以在语法上测试代码?

感谢您的宝贵时间

【问题讨论】:

  • $data_collected 是获取数组还是收集器数组?
  • 旁白:array_push 是一个不好的习惯。在极少数情况下您想使用它,但这不是其中之一。只需使用[] 运算符。
  • @Jon 出于好奇,为什么使用array_push 是个坏习惯?那是因为我们可以简单地使用[] 运算符吗?我看不出比调用文档所说的函数的开销有多大区别。
  • @code-jaff:它更慢,而且(更重要的是)它不是惯用的。每个人都会立即理解 [] 的作用,而 array_push 则需要人类读者“解析”它。
  • 在手册中它说“注意:如果你使用 array_push() 向数组添加一个元素,最好使用 $array[]”php.net/manual/en/function.array-push.php

标签: php mysql arrays database


【解决方案1】:

您的数组键将是默认整数,因此您不想检查它们。而不是这个:

if(array_key_exists($data_collected,$serie_bd_groupe)==false)

你应该这样做:

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

http://php.net/manual/en/function.in-array.php

另一方面,如果您希望收集的数据是数组键而不是值,您可以这样做,而不是您的 array_push:

$serie_bd_groupe[$data_collected] = 1;  

那么您的密钥检查将起作用。

【讨论】:

    【解决方案2】:

    如果您要从数据库中查找 UNIQUE 值 (serie_bd),请更新您的查询以包含“DISTINCT”,如下所示:

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

    另一方面,我认为您正在寻找http://phpfiddle.org/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-25
      • 1970-01-01
      • 2020-04-18
      • 2011-05-23
      • 2012-11-14
      相关资源
      最近更新 更多