Multidimensionales Array vergleichen

jannicars

Erfahrenes Mitglied
Hallo,

Ich möchte zwei multidimensionale Arrays vergleichen.
Hier einmal mein Code:
PHP:
<?php
$array1 = array(0 => array(0 => "test"), 1 => array(1 => "test2"), 2 => array(2 => "test3"));
$array2 = array(0 => array(0 => "test"), 1 => array(1 => "test2"), 3 => array(2 => "test3"));
$result = array_diff_assoc($array1, $array2);
print_r($result);
?>
gibt mir leider das zurück:
Code:
Array ( [2] => Array ( [2] => test3 ) )

Ich möchte gerne, dass ich ein leeres Array zurückbekomme, da ja alle Values übereinstimmen!
Wie kann ich das erreichen?
Ich möchte nur die Werte vergleichen, da die Indexe abweichen können, wie im Beispiel.
 
Zuletzt bearbeitet:
Du kannst ja nicht einfach die Werte vergleichen, bei anderen Indexes.... Ist ja als ob du Äpfel mit Birnen vergleichst. Wäre mir jedenfalls neu, dass das funktioniert.

Ich weiß nicht ob man das kann, aber du könntest versuchen die Indexe von 0 an bei beiden Arrays neu aufzureihen, damit diese gleich sind und dann erst vergleichen.

Guten Rutsch
 
Hallo,

Das ist denk ich auch mal keine gute Lösung,
da die Daten aus dem 1. Array aus einer Datenbank kommen und die id's
somit die indexe könnten extrem abweichen, deswegen denk ich mal, würde das neusortieren auch nix bringen.

Was ich erreichen möchte:
Als erstes lade ich aus einer externen Quelle eine Liste und pack alles in ein Array(in dem Fall Array1)
nun lade ich alle vorhanden Objekte aus meiner lokalen Datenbank und pack sie in das 2. Array.

Nun möchte ich diese beiden Arrays vergleichen und gucken, welche noch aus der ersten externen Quelle nicht in meiner Datenbank sind.
Deswegen könnten die ID's halt extrem abweichen!

Hätte jemand dazu eine gute Lösung?

Ebenfalls Guten Rutsch
 
Gehen wird es, ist jedoch sehr aufwending.
Dafür musst du eine Rekursive Funktion schreiben.
Diese muss prüfen ob der inhalt ein array oder ein wert ist.
- Bei einem Array ruft sich die funktion selbst auf (rekursiv).
- Bei einem Wert wird dieser in ein Array eingetragen

Allerdings weis ich nicht genau wie bei dir die Arrays
ineinander aufgebaut sind und in wie
die Arrays vergleichbar sind.

Aber eine Rekursion für einen solchen vergleich
je nach dem wie groß das Array ist wird extrem groß sein
und evtl. sogar von der laufzeit her für einen timeout sorgen bei zu vielen Daten.

Kannst du die Daten den nicht in ein normales Array einlesen?
Bzw. gibt es bei deinem Multidimensionalen Array eine Maximale tiefe? Also das z.B. nur 2 arrays ineinander geschachtelt werden.?
 
Hallo,
Also die 2 Arrays müssen in einer Schleife gebildet werden.
Wie ich in einer Schleife ein normales Array bilden soll..ka..?
Jedes Array hat so um die 30.000 Werte(Tendenz steigend).

Und die multidimensionale Array Struktur ist wie oben im Beispiel!

Die Scriptlaufzeit ist eigentlich egal, da ich nen eigenen Server habe, das dann per
Cronjob aufgerufen wird..natürlich söllte es nicht zu stark verzögern und zu
RAM lastig sein.
 
Zuletzt bearbeitet:
jeden wert hinzufügen... halt statt
PHP:
$meinArray[] = array("");
so
PHP:
$meinArray[] = "";
falls der wert in einem array ist, musst du halt
PHP:
$meinArray[] = $irgendEinArray[0];
verwenden und den wert auslesen.

Wenn du dan 2 Normale Arrays hast kannst du die 2 arrays alle werte miteinander vergleichen und werte die in beiden vorhanden sind entfernen. So hast du am ende ein array mit allen fehlenden werten. Für das vergleichen musst du dan 2 schleifen verwenden wie beim bubblesort algorythmus.
 
Zuletzt bearbeitet:
Ok so scheint das recht gut zu funktionieren!

Würde es sinn machen Array1 und 2 danach einmal unset(); machen, würde dies den RAM entlasten?
Weil um 30.000 Werte können bestimmt ganz schön zumüllen.
 
Wenn danach noch einiges an Code ausgeführt wird, wäre es sinnvoll. Wenn nicht, macht das PHP beim Beenden des Scripts selbst (Garbage Collector).
 
Zurück