因此,我试图显示从数据库中的表生成的关联数组。这些是我试图完成的步骤:
- 从数据库中获取已根据列(升序/降序)按特定顺序排序的结果集。
- 将结果集中的每个记录/行添加/传输/附加到另一个数组。 在追加过程中,检查我们要添加记录的数组是否具有与我们当前添加的记录相似的值(基于不同的列)。
- 如果我们要检查的值已经存在,则跳过附加。如果没有,则附加记录并继续循环,直到结果集末尾。
这是我正在使用的示例数据,tbl_user_details: Sample data
如您所见,它已根据 user_pos 列按降序排序。如果您查看user_id列,我们有重复的值。我想要实现的目标是将每条记录添加到数组中,并根据 user_id column.user_id = 4 和 user_pos = 7 跳过重复值。接下来是带有 user_id = 2 和 user_pos = 6 的 ada。我们不打算添加的下一条记录是 woz,其中 user_id = 2 和 user_pos = 5,因为我们已经有一个 user_id = 2 的人。因此,我们跳过添加具有 user_id = 3 和 user_pos = 4 的 ghopper...等等。我认为这个示例解释了我需要显示的数据流。
我尝试了一些简单的代码来完成此操作,但它显然不起作用。这是片段:
$query3 = "SELECT * FROM `user_details` ORDER BY `user_details`.`user_pos` DESC";
$user_set = mysqli_query($connection, $query3);
if (!$user_set) {
die("Database query failed.".mysqli_error($connection));
}
$user_arr = array();
while ($row = mysqli_fetch_assoc($user_set)) {
if (in_array($row["user_id"], $user_arr)) {
continue; // skip if we already have this value in array
}
$user_arr[] = $row;
}
应显示的记录是 aswartz、ada、ghopper 和 rasmusl。其余的被忽略。当我使用 foreach 循环方法显示“$user_arr[]”中的数据时,它仍然显示表格上的整个数据。
最佳答案
当您将row
添加到array
时,它会变成多维数组,因此您无法在其中检查user_id
。还有许多其他解决方案来检查唯一记录,但一个最简单的解决方案是将 user_id 分配为键,然后检查键是否重复
while ($row = mysqli_fetch_assoc($user_set)) {
if (isset($user_arr[$row["user_id"]])) {
continue; // skip if we already have this value in array
}
$user_arr[$row["user_id"]] = $row;
}
注意: 如果您只需要唯一记录,则可以在查询中使用DISTINCT
关于php - 将元素追加到数组并跳过某些值(如果存在)[PHP],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46364515/