So entfernen Sie doppelte Werte aus einem mehrdimensionalen Array in PHP

Lesezeit: 5 Minuten

Wie kann ich doppelte Werte aus einem mehrdimensionalen Array in PHP entfernen?

Beispiel-Array:

Array
(
    [0] => Array
    (
        [0] => abc
        [1] => def
    )

    [1] => Array
    (
        [0] => ghi
        [1] => jkl
    )

    [2] => Array
    (
        [0] => mno
        [1] => pql
    )

    [3] => Array
    (
        [0] => abc
        [1] => def
    )

    [4] => Array
    (
        [0] => ghi
        [1] => jkl
    )

    [5] => Array
    (
        [0] => mno
        [1] => pql
    )

)

So entfernen Sie doppelte Werte aus einem mehrdimensionalen Array in
Daveiler

Hier ist ein anderer Weg. Es werden keine Zwischenvariablen gespeichert.

Wir haben dies verwendet, um Ergebnisse aus einer Vielzahl sich überschneidender Abfragen zu deduplizieren.

$input = array_map("unserialize", array_unique(array_map("serialize", $input)));

  • Aufgrund von Deserialize ist dies immer langsamer, je größer und komplexer das Array ist. Es gibt einen Grund, warum ich array_intersect_key verwendet habe (ein halbes Jahr vor dieser Antwort).

    – OIS

    8. Februar 2013 um 23:00 Uhr

  • @OIS hat es gerade getestet, hatte einen Tippfehler, aber es funktioniert.

    – trevorkavanaugh

    3. Juni 2013 um 20:26 Uhr

  • Wenn Sie den Index fortlaufend haben möchten, verwenden Sie array_values, dh $input = array_values(array_map(“unserialize”, array_unique(array_map(“serialize”, $input))));

    – lbsweek

    17. April 2014 um 10:44 Uhr


  • Heutzutage würden Sie sich wahrscheinlich für json_encode und json_decode anstelle der PHP-Serialisierung entscheiden. sollte Vorteile für die bereitgestellten Werte haben und Sie stoßen nicht auf PHP-Serialisierungsdetails, mit denen Serialize/Unserialize ausgeliefert wird und die höchstwahrscheinlich unerwünscht sind.

    – hakre

    23. August 2014 um 13:38 Uhr


  • Hüten Sie sich davor serialize(array('a' => '1', 'b' => '1')) unterscheidet sich von serialize(array('b' => '1', 'a' => '1')). Diese Option schlägt für Arrays fehl, die als verwendet werden sets oder (hash)maps.

    – Andras Gyomrey

    19. Oktober 2016 um 14:49 Uhr


1647080049 840 So entfernen Sie doppelte Werte aus einem mehrdimensionalen Array in
Jack

Seit 5.2.9 können Sie verwenden array_unique() wenn Sie die verwenden SORT_REGULAR Flagge so:

array_unique($array, SORT_REGULAR);

Dadurch vergleicht die Funktion Elemente auf Gleichheit, als ob $a == $b verwendet wurden, was perfekt für Ihren Fall ist.

Ausgabe

Array
(
    [0] => Array
        (
            [0] => abc
            [1] => def
        )

    [1] => Array
        (
            [0] => ghi
            [1] => jkl
        )

    [2] => Array
        (
            [0] => mno
            [1] => pql
        )

)

Bedenke das aber die Dokumentation Zustände:

array_unique() ist nicht für die Arbeit mit mehrdimensionalen Arrays vorgesehen.

  • Ich denke, das ist eine schnellere und klarere Lösung als die akzeptierte! lasst uns für diesen stimmen! 🙂 Hmmm auf php-site wir können sehen, dass es nicht so schnell geht, wie ich dachte …

    – Andron

    5. Mai 2015 um 10:50 Uhr


  • Seltsam, dass die Verwendung des SORT_REGULAR-Flags für mich einfach nicht funktioniert, um doppelte Arrays zu entfernen.

    – Stefan

    30. Juli 2015 um 8:28 Uhr

  • @Stefan Du hast recht; es scheint nicht die richtigen Ergebnisse zu liefern, aber es ist wahrscheinlich ein Fehler, weil es funktioniert mit PHP7 =/

    – Jack

    30. Juli 2015 um 9:25 Uhr

  • Dies scheint auch in meinem Fall zu funktionieren, aber stört sich sonst noch jemand an diesem Hinweis im array_unique()-Dokument? php.net/manual/en/…

    – Arleigh Hix

    2. Mai 2016 um 18:46 Uhr

  • @Jack Sie haben Recht, dies ist ein Fehler ab PHP 5.6.23: eval.in/645675 ist aber ab PHP 7.0.8 behoben: eval.in/645676

    – Zack Morris

    21. September 2016 um 1:40 Uhr

1647080050 880 So entfernen Sie doppelte Werte aus einem mehrdimensionalen Array in
Rajendrasinh

Ich hatte ein ähnliches Problem, aber ich habe eine 100% funktionierende Lösung dafür gefunden.

<?php
    function super_unique($array,$key)
    {
       $temp_array = [];
       foreach ($array as &$v) {
           if (!isset($temp_array[$v[$key]]))
           $temp_array[$v[$key]] =& $v;
       }
       $array = array_values($temp_array);
       return $array;

    }


$arr="";
$arr[0]['id']=0;
$arr[0]['titel']="ABC";
$arr[1]['id']=1;
$arr[1]['titel']="DEF";
$arr[2]['id']=2;
$arr[2]['titel']="ABC";
$arr[3]['id']=3;
$arr[3]['titel']="XYZ";

echo "<pre>";
print_r($arr);
echo "unique*********************<br/>";
print_r(super_unique($arr,'titel'));

?>

  • Dies beantwortet eine andere Frage. Siehe hier: stackoverflow.com/questions/4585208/…

    – OIS

    8. Februar 2013 um 23:28 Uhr

  • Tolle Funktion! und falls es sich um Objekte handelt: if(!isset($array->$v->$key)) $array[$v->$key] =& $v;

    – Playnox

    17. März 2016 um 19:06 Uhr


So entfernen Sie doppelte Werte aus einem mehrdimensionalen Array in
OIS

Ein anderer Weg. Bewahrt auch Schlüssel auf.

function array_unique_multidimensional($input)
{
    $serialized = array_map('serialize', $input);
    $unique = array_unique($serialized);
    return array_intersect_key($input, $unique);
}

1647080051 753 So entfernen Sie doppelte Werte aus einem mehrdimensionalen Array in
Mahak Choudhary

Array
(
    [0] => Array
        (
            [id] => 1
            [name] => john
        )

    [1] => Array
        (
            [id] => 2
            [name] => smith
        )

    [2] => Array
        (
            [id] => 3
            [name] => john
        )

    [3] => Array
        (
            [id] => 4
            [name] => robert
        )

)

$temp = array_unique(array_column($array, 'name'));
$unique_arr = array_intersect_key($array, $temp);

Dadurch werden die doppelten Namen aus dem Array entfernt. einzigartig durch Schlüssel

  • Stelle sicher das $arrayDie Schlüssel von beginnen bei “0”. Es ist möglich $arrayDie Schlüssel von beginnen bei einer anderen Nummer, wenn $array ist das Ergebnis einer vorherigen Array-Manipulation. Verwenden array_values um die Tasten auf „0“ zurückzusetzen

    – stevevance

    28. Mai 2020 um 18:19 Uhr


Wenn “Duplikate entfernen” bedeutet “Duplikate entfernen, aber eins dort lassen”, könnte eine Lösung darin bestehen, das anzuwenden array_unique(...) zuerst auf die “Identifier-Spalte” und dann im ursprünglichen Array alle Schlüssel zu entfernen, die aus dem Spalten-Array entfernt wurden:

$array = [
    [
        'id' => '123',
        'foo' => 'aaa',
        'bar' => 'bbb'
    ],
    [
        'id' => '123',
        'foo' => 'ccc',
        'bar' => 'ddd'
    ],
    [
        'id' => '567',
        'foo' => 'eee',
        'bar' => 'fff'
    ]
];

$ids = array_column($array, 'id');
$ids = array_unique($ids);
$array = array_filter($array, function ($key, $value) use ($ids) {
    return in_array($value, array_keys($ids));
}, ARRAY_FILTER_USE_BOTH);

Das Ergebnis ist:

Array
(
    [0] => Array
        (
            [id] => 123
            [foo] => aaa
            [bar] => bbb
        )

    [2] => Array
        (
            [id] => 567
            [foo] => eee
            [bar] => fff
        )

)

  • Stelle sicher das $arrayDie Schlüssel von beginnen bei “0”. Es ist möglich $arrayDie Schlüssel von beginnen bei einer anderen Nummer, wenn $array ist das Ergebnis einer vorherigen Array-Manipulation. Verwenden array_values um die Tasten auf „0“ zurückzusetzen

    – stevevance

    28. Mai 2020 um 18:19 Uhr


PHP Array Schlussel andern
Manoj Sharma

Der Benutzer kommentiert die array_unique() Dokumentation hat viele Lösungen dafür. Hier ist einer davon:

kenrbnsn bei rbnsn dot com

27. September 2005 12:09

Noch ein weiteres Array_Unique für mehrdimensionale Arrays. Ich habe dies nur auf zweidimensionalen Arrays getestet, aber es könnte wahrscheinlich für mehr verallgemeinert oder zur Verwendung von Rekursion gemacht werden.

Diese Funktion verwendet die Funktionen serialize, array_unique und unserialize, um die Arbeit zu erledigen.


function multi_unique($array) {
    foreach ($array as $k=>$na)
        $new[$k] = serialize($na);
    $uniq = array_unique($new);
    foreach($uniq as $k=>$ser)
        $new1[$k] = unserialize($ser);
    return ($new1);
}

Das ist von http://ca3.php.net/manual/en/function.array-unique.php#57202.

993360cookie-checkSo entfernen Sie doppelte Werte aus einem mehrdimensionalen Array in PHP

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy