从多维数组中的数组中删除重复值

时间:2018-11-18 16:13:21

标签: php arrays multidimensional-array

此刻我有这个数组:

    array(4) {
    [0]=>
    array(2) {
       ["cluster"]=>
       string(3) "ICT"
       ["opleiding"]=>
       string(32) "Applicatie- en mediaontwikkeling"
    }
    [1]=>
    array(2) {
       ["cluster"]=>
       string(3) "ICT"
       ["opleiding"]=>
       string(21) "ICT cluster opleiding"
    }
    [2]=>
    array(2) {
       ["cluster"]=>
       string(15) "nog een cluster"
       ["opleiding"]=>
       string(25) "nog een cluster opleiding"
    }
    [3]=>
    array(2) {
       ["cluster"]=>
       string(8) "Techniek"
       ["opleiding"]=>
       string(26) "Techniek cluster opleiding"
   }
}      

我希望能够从此阵列中删除重复的群集,在这种情况下为“ ICT”(最终可能会变得更多)。

此数组来自以下查询:

        $result_array = $wpdb->get_results("SELECT cluster.cluster, 
        opleiding.opleiding 
        FROM opleiding 
        INNER JOIN cluster 
        ON opleiding.cluster_id = cluster.cluster_id 
        GROUP BY opleiding.opleiding", ARRAY_A);

所以,我想要的数组是什么样的:

    array(4) {
    [0]=>
    array(2) {
       ["cluster"]=>
       string(3) "ICT"
       ["opleiding"]=>
       string(32) "Applicatie- en mediaontwikkeling"
    }
    [1]=>
    array(1) {
       ["opleiding"]=>
       string(21) "ICT cluster opleiding"
    }
    [2]=>
    array(2) {
       ["cluster"]=>
       string(15) "nog een cluster"
       ["opleiding"]=>
       string(25) "nog een cluster opleiding"
    }
    [3]=>
    array(2) {
       ["cluster"]=>
       string(8) "Techniek"
       ["opleiding"]=>
       string(26) "Techniek cluster opleiding"
   }
}      

我将如何处理此问题?我应该在查询中更改某些内容吗?还是我最初的想法是从数组中删除该值正确,然后我该怎么做?

我的输出功能:

public function getOpleidingCluster()
{
    global $wpdb;
    $return_array = array();
    $result_array = $wpdb->get_results("SELECT cluster.cluster, opleiding.opleiding 
    FROM opleiding 
    INNER JOIN cluster 
    ON opleiding.cluster_id = cluster.cluster_id 
    GROUP BY opleiding.opleiding", ARRAY_A);



    echo "<pre>";
    var_dump($result_array);
    echo "   </pre>";
    // For all database results:
    foreach ($result_array as $idx => $array) {
        // New opleiding object
        $koppelOpleidingCluster = new ClusterOpleiding();
        // Set all info
        $koppelOpleidingCluster->setCluster($array['cluster']);
        $koppelOpleidingCluster->setClusterId($array['cluster_id']);
        $koppelOpleidingCluster->setOpleidingId($array['opleiding_id']);
        $koppelOpleidingCluster->setOpleiding($array['opleiding']);
        // Add new object to return array.
        $return_array[] = $koppelOpleidingCluster;
    }
    return $return_array;
}

获取页面上的数据:

        <table border="1">
        <?php
        $koppelOpleidingCluster = $clusterOpleiding->getOpleidingCluster();
        foreach ($koppelOpleidingCluster as $koppelOpleidingCluster2){
            ?>
            <tr>
                <td style="display:none;"> <input type="hidden" name="clusterId" value=" <?php echo $koppelOpleidingCluster2->getClusterId(); ?>"></td>
                <td name="cluster"> <?php echo $koppelOpleidingCluster2->getCluster(); ?></td>
            </tr>
            <tr>
                <td style="display:none;"> <input type="hidden" name="opleidingId" value=" <?php echo $koppelOpleidingCluster2->getOpleidingId(); ?>"></td>
                <td name="opleiding"> <?php echo $koppelOpleidingCluster2->getOpleiding(); ?></td>
            </tr>
            <?php

        }
        ?>
        </table>

教育意味着教育

谢谢!

2 个答案:

答案 0 :(得分:1)

您想要获得的所需数组结构并不是我建议的。最佳实践是数组中的所有元素都具有相同的键。

您似乎正在寻找一种抑制输出中重复值的方法。尝试使您的阵列与所需的输出匹配是错误的。而是保留数组原样,并且 only 使您的代码对其进行迭代,使其意识到重复的值,从而使其不输出它们。

在此之前,您还需要了解一下SQL查询。它违反了一个规则,即如果您有group by子句,则select子句应只包含聚合表达式或出现在group by子句中的表达式。在这种情况下,在我看来,您可以跳过group by子句。而是添加一个order by cluster.cluster, opleiding.opleiding子句,以确保重复出现的群集不会中断。或者换句话说:它保证属于同一集群的所有教育都一起列出。

现在更改输出代码。使用一个将用于检测重复值的额外变量,并添加一个if块,该块仅在不重复时显示集群行:

<?php
    $prevCluster = ""; // <----- add this
    $koppelOpleidingCluster = $clusterOpleiding->getOpleidingCluster();
    foreach ($koppelOpleidingCluster as $koppelOpleidingCluster2){
        if ($koppelOpleidingCluster2->getClusterId() != $prevCluster) { // <----
?>
        <tr>
            <td style="display:none;"> <input type="hidden" name="clusterId" value=" <?php echo $koppelOpleidingCluster2->getClusterId(); ?>"></td>
            <td name="cluster"> <?php echo $koppelOpleidingCluster2->getCluster(); ?></td>
        </tr>
<?php
        } // <-----
        $prevCluster = $koppelOpleidingCluster2->getClusterId(); // <-----
?>
        <tr>
            <td style="display:none;"> <input type="hidden" name="opleidingId" value=" <?php echo $koppelOpleidingCluster2->getOpleidingId(); ?>"></td>
            <td name="opleiding"> <?php echo $koppelOpleidingCluster2->getOpleiding(); ?></td>
        </tr>
<?php
    }
?>

答案 1 :(得分:-1)

array_unique($ array,SORT_REGULAR)使用此