所以,我正在尝试显示从我的数据库中的表生成的关联数组。这些是我要完成的步骤:
这是我正在使用的示例数据, 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。我们不会添加的下一条记录是带有 user_id = 2 和 user_pos = 5 的woz,因为我们已经有了 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 []'中显示数据时,它仍然显示表中的整个数据。
答案 0 :(得分:1)
将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
答案 1 :(得分:0)
在$tempArr
中使用仅包含user_id
的其他in_array
,在您的代码中,您正在针对数组或整行检查user_id
这是用户详细信息,而不仅仅是针对user_ids
$user_arr = array();
$tempArr = array();
while ($row = mysqli_fetch_assoc($user_set)) {
if (in_array($row["user_id"], $tempArr)) {
continue; // skip if we already have this value in array
}
$user_arr[] = $row;
$tempArr[] = $row["user_id"];
}