我有一个包含多个条目的数据库.我感兴趣的一个特定的条目列被称为sample_group.如果有10行条目sample_group,我试图使用PHP创建一个唯一条目的数组.
例如,条目将是"food", "food", "water", "food", "swabs", "swabs", "swabs", "food", "water", "water"和创建数组后应该是:array("food", "water", "swabs").
这是我尝试过的代码,它有点工作,但数组末尾有一个空条目:
$sql3 = "SELECT * FROM samples_database WHERE order_id=$order_id;";
$result3 = mysqli_query($conn, $sql3);
$group_array = '';
while ($input = mysqli_fetch_array($result3)) {
$group_array .= $input['sample_group'] . ',';
}
$group_array2 = array_filter(array_unique(explode(',', $group_array)));
Run Code Online (Sandbox Code Playgroud)
然后是foreach循环:
foreach ($group_array2 as $group) {
//do something
}
Run Code Online (Sandbox Code Playgroud)
任何人都可以把我推向正确的方向吗?
如果你制作$group_array一个实际的数组会更简单:
$group_array = array();
while ($input = mysqli_fetch_array($result3)) {
$group_array[] = $input['sample_group'];
}
$group_array = array_unique($group_array);
foreach ($group_array as $group) {
//do something
}
Run Code Online (Sandbox Code Playgroud)
我建议只SELECT DISTINCT在MySQL端做一个:
$sql = "SELECT DISTINCT sample_group FROM samples_database WHERE order_id = ?";
$stmt = $mysqli->prepare($sql);
$stmt->bind_param("i", $order_id);
$stmt->execute();
$result = $stmt->get_result();
if ($result->num_rows > 0) {
while ($row = $result->fetch_assoc()) {
$group_array[] = $row['sample_group'];
}
}
Run Code Online (Sandbox Code Playgroud)
注意:理想情况下,在构建SQL查询时应使用预准备语句,并避免连接.我试图提供使用预准备语句的代码.
另外,我SELECT *用just 替换了你的(所有列)SELECT sample_group.这样做的原因是,一方面,当脚本只需要其中一个列时选择所有列会浪费网络带宽,并可能损害性能.另一个原因是,您的脚本确实需要使用哪些列SELECT *会使其模糊不清.