Удалить дублирующее значение из массива в многомерном массиве - PullRequest
0 голосов
/ 18 ноября 2018

На данный момент у меня есть этот массив:

    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"
   }
}      

Из этого массива я хотел бы иметь возможность удалять дублирующиеся кластеры, в данном случае «ИКТ» (может стать более в конечном итоге).

Этот массив получен из следующего запроса:

        $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"
   }
}      

Как бы я подошел к этой проблеме?Должен ли я что-то изменить в своем запросе?Или моя первоначальная мысль удалить значение из массива правильная, и как мне тогда это сделать?

Моя функция вывода:

<code>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 "
"; // Для всех результатов базы данных: foreach ($result_array as $ idx => $ array) {// Новый объект opleiding $ koppelOpleidingCluster = new ClusterOpleiding (); // Установить всю информацию $ koppelOpleidingCluster-> setCluster ($ array ['cluster']); $ koppelOpleidingCluster-> setClusterId ($array ['cluster_id']); $ koppelOpleidingCluster-> setOpleidingId ($ array ['opleiding_id']); $ koppelOpleidingCluster-> setOpleiding ($ array ['opleiding']); // Добавить новый объект для возврата массива. $ 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>

opleiding означает образование

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 18 ноября 2018

Желаемая структура массива, к которой вы хотите получить, на самом деле я бы не советовала.Рекомендуется, чтобы все элементы в массиве имели одинаковые ключи.

Похоже, вы ищете способ подавления повторяющихся значений в вашем выводе .Ошибочно пытаться заставить ваш массив соответствовать желаемому результату.Вместо этого оставьте массив как есть, и только заставит ваш код, который повторяет его, знать о повторяющихся значениях, чтобы он не выводил их.

Прежде чем перейти к этому, есть еще один моментсделать о вашем запросе 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
    }
?>
0 голосов
/ 18 ноября 2018

array_unique ($ array, SORT_REGULAR) использовать это

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...