【问题标题】:remove duplicated data from two different foreach loops从两个不同的 foreach 循环中删除重复数据
【发布时间】:2019-07-11 23:23:49
【问题描述】:

每个循环我有两个。每个都在不同的表上运行

$nores_std="SELECT std_id,std_name FROM student WHERE std_class = '$cl' ";
$nores_q = mysqli_query($link,$nores_std);
foreach ($nores_q as $name_std){
echo $name_std['std_id']; echo '<br>';
}
echo '<br>';
$no_select = "SELECT std_id,std_name FROM selection WHERE std_class = '$cl' ";
$no_select_q = mysqli_query($link,$no_select);
foreach ( $no_select_q as $std_sel){
    echo $std_sel['std_id'];
    echo '<br>';
}

第一个结果是:

**554553**
**554557**
554561
**554566**
554573
**554577**
554581
554582
554587
**554590**
554591
554593
554596
554597
554599
554602
554603
554604
554607
554619
554620
554632
554637
554640
554643
554648
**554549**

第二个结果是:

554566
554577
554549
554590
554553
554557

我想检查重复并删除重复值,只显示不重复的值

【问题讨论】:

  • 你能用SELECT DISTINCT std_id, std_name... 吗?这取决于你的数据,但我希望你的学生姓名和ID是1:1。
  • 即使值的顺序不同,加入也会帮助我?
  • 您应该首先修复您的数据模型。看起来您在两个表中都有学生 ID 和姓名。假设student 应该保存实际的学生详细信息,selection 保存学生选择了哪些课程的信息(?),名称应该只出现在第一个中,而不是在第二个中重复重复。您应该正确地将您需要的信息连接在一起。
  • 我有学生表和课程选择表,每个学生都从一个列表中选择课程,我想显示选择了是的学生
  • 您可以使用array_uniquearray_diff 解决它,但我会重新检查您的数据方案

标签: php loops duplicates


【解决方案1】:

PHP 的解决方案是array-diff

$nores_std="SELECT std_id,std_name FROM student WHERE std_class = '$cl' ";
$nores_q = mysqli_query($link,$nores_std);
foreach ($nores_q as $name_std){
    $a[] = $name_std['std_id'];
}

$no_select = "SELECT std_id,std_name FROM selection WHERE std_class = '$cl' ";
$no_select_q = mysqli_query($link,$no_select);
foreach ( $no_select_q as $std_sel){
    $b[] = $std_sel['std_id'];
}

$res = array_diff($a, $b);

注意您可以使用array-column 来避免foreach 循环

我会重新检查数据方案 - 您可能希望以不同的方式获取数据

【讨论】:

  • 警告:array_column() 期望参数 1 是数组,对象在 C:\xampp\htdocs\School\class_no_select.php 第 10 行中给出警告:array_column() 期望参数 1 是数组,第 14 行 C:\xampp\htdocs\School\class_no_select.php 中给出的对象 警告:array_diff(): Argument #1 is not an array in C:\xampp\htdocs\School\class_no_select.php on line 16 这是我得到的错误
  • @drorshalit 添加了mysqli_fetch_all 以将结果对象转换为数组
  • @drorshalit 使用您到目前为止所做的方式来获取您的值 - 这个答案的主线是array_diff。我编辑我的帖子作为您获取数据的方式
  • 谢谢!我仍然得到相同的重复值。我想合规地从数组中删除匹配的重复项。
  • 你能在array_diffarray_diff的输出之前分享数组$a$b
【解决方案2】:

最有效的方法是在单个查询中从两个表中选择不同的:

SELECT DISINCT std_id, std_name FROM
(
        SELECT std_id, std_name FROM student   WHERE std_class = '$cl'
  UNION SELECT std_id, std_name FROM selection WHERE std_class = '$cl'
) t

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-19
    • 2017-02-23
    • 1970-01-01
    • 2012-02-15
    • 2020-01-14
    相关资源
    最近更新 更多