array_diff() liefert nicht das erwartete Resultat


Status
Dieses Thema wurde gelöst! Zur Lösung gehen…

tklustig

Erfahrenes Mitglied
#1
Hi Leute, ich benötige gewisse Elemente eines Arrays, die in einem anderen nicht enthalten sind. Dazu benutze ich folgenden Code, der allerdings nicht wie erwartet reagiert. Hier zunächst die var_dump() Ausgaben im Code:

Code:
Alle Dateinamen in der Datenbank
array(10) { [0]=> string(9) "haus1.jpg" [1]=> string(10) "villa1.jpg" [2]=> string(9) "immo4.jpg" [3]=> string(24) "kitchen-1940175__340.jpg" [4]=> string(21) "modern-minimalist.jpg" [5]=> string(27) "Artwork-20180803-184430.png" [6]=> string(27) "Artwork-20180803-184813.png" [7]=> string(27) "Artwork-20180803-184430.png" [8]=> string(27) "Artwork-20180803-184813.png" [9]=> string(27) "Artwork-20180803-185427.png" }
Bereinigte(unique) Dateinamen in der Datenbank
array(8) { [0]=> string(9) "haus1.jpg" [1]=> string(10) "villa1.jpg" [2]=> string(9) "immo4.jpg" [3]=> string(24) "kitchen-1940175__340.jpg" [4]=> string(21) "modern-minimalist.jpg" [5]=> string(27) "Artwork-20180803-184430.png" [6]=> string(27) "Artwork-20180803-184813.png" [9]=> string(27) "Artwork-20180803-185427.png" }
Beseitigte Dateinamen in der Datenbank
array(0) { }
Wie man sieht, ist das letzte Array leer, obgleich es eigentlich die nicht enthaltenen Elemente von array2 verglichen mit array1 enthalten sollte. Hier noch der Code:
PHP:
        $arrayOfAllFilenames = array();
        foreach ($modelDateianhang as $item) {
            array_push($arrayOfAllFilenames, $item->dateiname);
        }
        $arrayOfFilesNamesUnique = array_unique($arrayOfAllFilenames);
        $arrayOfDifference = array_diff($arrayOfAllFilenames,$arrayOfFilesNamesUnique);
        print_r('Alle Dateinamen in der Datenbank<br>');
        var_dump($arrayOfAllFilenames);
        print_r('<br>Bereinigte(unique) Dateinamen in der Datenbank<br>');
        var_dump($arrayOfFilesNamesUnique);
        print_r('<br>Beseitigte Dateinamen in der Datenbank<br>');
        var_dump($arrayOfDifference);
        die();
 

Sempervivum

Erfahrenes Mitglied
#2
Wenn ich mir die Beschreibung ansehe für array_diff und mir ansehe, wie das zweite Array entstanden ist, scheint mir das seine Richtigkeit zu haben:
Vergleicht array1 mit einem oder mehr anderen Arrays und gibt die Werte aus array1 zurück, die in keinem der anderen Arrays enthalten sind.
Das zweite Array ist durch array_unique entstanden, d. h. mehrfache Einträge wurden entfernt. Das bedeutet aber auch, dass die differierenden, d. h. mehrfachen Einträge im zweiten, unique Array, enthalten sind. D. h. das Kriterium in der Beschreibung triff auf kein Element zu.
 

tklustig

Erfahrenes Mitglied
#3
Wenn ich mir die Beschreibung ansehe für array_diff und mir ansehe, wie das zweite Array entstanden ist, scheint mir das seine Richtigkeit zu haben:
Das zweite Array ist durch array_unique entstanden, d. h. mehrfache Einträge wurden entfernt. Das bedeutet aber auch, dass die differierenden, d. h. mehrfachen Einträge im zweiten, unique Array, enthalten sind. D. h. das Kriterium in der Beschreibung triff auf kein Element zu.
Wie bekomme ich dann die unterschiedlichen Einträge zweier Arrays in ein drittes Array plaziert, wenn nicht mit array_diff()??
 
Status
Dieses Thema wurde gelöst! Zur Lösung gehen…