PHP: Doppelte Elemente aus einem mehrdimensionalen Array entfernen

Der folgende Code entfernt alle doppelten Elemente aus einem mehrdimensionalen Array. Der strukturelle Aufbau spielt dabei keine Rolle.

Code:

/* Vorher:
Array
(
    [0] => Array ( [0] => unique )
    [1] => Array
        (
            [0] => Array ( [0] => 1337 )
            [1] => Array ( [0] => 1338 )
        )
    [2] => Array
        (
            [0] => Array ( [0] => 1337 )
            [1] => Array ( [0] => 1338 )
        )
    [3] => Array ( [test] => test )
    [4] => Array ( [test] => test )
    [5] => Array ( [0] => 123456 )
    [6] => Array ( [0] => 123456 )
)
*/


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

/* Nachher:
Array
(
    [0] => Array ( [0] => unique )
    [1] => Array
        (
            [0] => Array ( [0] => 1337 )
            [1] => Array ( [0] => 1338 )
        )
    [3] => Array ( [test] => test )
    [5] => Array ( [0] => 123456 )
)
*/

Alle Elemente eines mehrdimensionalen Arrays durchlaufen und bearbeiten

Wenn mit den Werten eines mehrdimensionalen Arrays gearbeitet wird, dann kommen häufig Schleifen zum Einsatz. Das kann bei großen verschachtelten Arrays viel „Schreibarbeit“ bedeuten. Die PHP-Funktion „array_walk_recursive“ vereinfacht das Ganze. In dem nachfolgenden Beispiel werden alle Werte des Arrays in base64 kodiert.

Code:

$aData = array();
$aData['ebene1']            = array_fill(0, 2, 'Wert1');
$aData['ebene1']['ebene2']  = array_fill(0, 2, 'Wert2');

var_dump($aData);

/**
 * Ausgabe (vorher)
 array(1) { ["ebene1"]=> array(3)
                         {[0]=> string(5) "Wert1"
                          [1]=> string(5) "Wert1"
                          ["ebene2"]=> array(2)
                                       {[0]=> string(5) "Wert2"
                                        [1]=> string(5) "Wert2"}}
}
*/


function encodeToBase64(&$aItem, $mKey)
{
    $aItem = base64_encode($aItem);
}

array_walk_recursive($aData, "encodeToBase64");

var_dump($aData);

/*
 * Ausgabe (nachher):
array(1) { ["ebene1"]=> array(3)
                        {[0]=> string(8) "V2VydDE="
                         [1]=> string(8) "V2VydDE="
                         ["ebene2"]=> array(2)
                                      {[0]=> string(8) "V2VydDI="
                                       [1]=> string(8) "V2VydDI="}}
}
*/