如何将 array_unique() 与 MySQL 查询的输出一起使用

How do I use array_unique() with the output of MySQL query

我有一个相当复杂的 MySQL 调用,结果是像这样的简单输出;

name  timestamp             comm1 comm2 counter
Bill  2021-04-18 19:31:00   data  data  1
Bill  2021-04-18 19:32:00   data  data  2
Bill  2021-04-18 19:33:00   data  data  3
Bill  2021-04-18 19:34:00   data  data  4
Tom   2021-04-18 19:31:00   data  data  1
Tom   2021-04-18 19:35:00   data  data  2
Tom   2021-04-18 19:37:00   data  data  3
Tom   2021-04-18 19:38:00   data  data  4

...还有更多行。

使用 PHP 我想创建一个仅包含名称的唯一值的数组。所以在这种情况下,比尔和汤姆。 我想我会使用 foreach 将 8 个名称中的每一个放在一个数组中,然后使用 array_unique 将其简化为两个。 但我不清楚如何做到这一点,听起来很简单,但经过各种尝试后仍然没有成功。

$collecting_names = array();
foreach($db_found->query($sql) as $cnrow) {
   $collecting_stations = array_unique($cnrow[name]);
}

我做错了什么?

$cnrow['name'] 不是数组,在那里调用 array_unique() 是没有意义的。

您在循环完成后对结果数组调用 array_unique()

$collecting_names = array();
foreach($db_found->query($sql) as $cnrow) {
   $collecting_names[] = $cnrow['name'];
}
$collecting_names = array_unique($collecting_names);

Array_unique 在您完成构建数组后应用

$collecting_names = array();
foreach($db_found->query($sql) as $cnrow) {
   $collecting_names[] = $cnrow[name];
}
$collecting_names = array_unique($collecting_names);

您也可以在添加之前检查它是否存在。

$collecting_names = array();
foreach($db_found->query($sql) as $cnrow) {
   if (!in_array($cnrow[name], $collecting_names))  $collecting_names[] = $cnrow[name];
}