tutorials.de Buch-Aktion 05/2012
Like Tree2Danke
  • 1 Beitrag von H4ckHunt3r
  • 1 Beitrag von saftmeister
ERLEDIGT
JA
ANTWORTEN
11
ZUGRIFFE
404
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    jannicars jannicars ist offline Mitglied Gold
    Registriert seit
    Jun 2011
    Beiträge
    219
    Hallo,

    Ich möchte zwei multidimensionale Arrays vergleichen.
    Hier einmal mein Code:
    PHP-Code:
    <?php
    $array1 
    = array(=> array(=> "test"), => array(=> "test2"), => array(=> "test3"));
    $array2 = array(=> array(=> "test"), => array(=> "test2"), => array(=> "test3"));
    $result array_diff_assoc($array1$array2);
    print_r($result);
    ?>
    gibt mir leider das zurück:
    Code :
    1
    
    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.
    Geändert von jannicars (31.12.11 um 21:57 Uhr)
     

  2. #2
    Avatar von Lime
    Lime Lime ist gerade online frisch fruchtig
    Registriert seit
    Jul 2011
    Beiträge
    373
    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
     

  3. #3
    jannicars jannicars ist offline Mitglied Gold
    Registriert seit
    Jun 2011
    Beiträge
    219
    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
     

  4. #4
    Avatar von H4ckHunt3r
    H4ckHunt3r H4ckHunt3r ist offline Mitglied Silber
    Registriert seit
    Aug 2011
    Ort
    Ennepetal (NRW)
    Beiträge
    66
    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.?
     
    Lg H4ckHunt3r
    Auf Danke klicken kostet nichts und weh tut es auch nicht ;)
    Meine Homepage | Mein Projekt | Mein Clan

  5. #5
    jannicars jannicars ist offline Mitglied Gold
    Registriert seit
    Jun 2011
    Beiträge
    219
    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.
    Geändert von jannicars (01.01.12 um 02:11 Uhr)
     

  6. #6
    Avatar von H4ckHunt3r
    H4ckHunt3r H4ckHunt3r ist offline Mitglied Silber
    Registriert seit
    Aug 2011
    Ort
    Ennepetal (NRW)
    Beiträge
    66
    jeden wert hinzufügen... halt statt
    PHP-Code:
    $meinArray[] = array(""); 
    so
    PHP-Code:
    $meinArray[] = ""
    falls der wert in einem array ist, musst du halt
    PHP-Code:
    $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.
    Geändert von H4ckHunt3r (01.01.12 um 02:14 Uhr)
    jannicars bedankt sich. 
    Lg H4ckHunt3r
    Auf Danke klicken kostet nichts und weh tut es auch nicht ;)
    Meine Homepage | Mein Projekt | Mein Clan

  7. #7
    jannicars jannicars ist offline Mitglied Gold
    Registriert seit
    Jun 2011
    Beiträge
    219
    Ok, danke dir!

    Werd ich mich mal morgen dransetzen(um diese Uhrzeit wird das wohl nix mehr bringen)!
     

  8. #8
    jannicars jannicars ist offline Mitglied Gold
    Registriert seit
    Jun 2011
    Beiträge
    219
    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.
     

  9. #9
    Avatar von saftmeister
    saftmeister saftmeister ist offline Der Saft sei mit dir
    tutorials.de Premium-User
    Registriert seit
    May 2006
    Ort
    There is no place like 127.0.0.1
    Beiträge
    3.521
    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).
    jannicars bedankt sich. 
    Grüße
    --
    Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)

  10. #10
    jannicars jannicars ist offline Mitglied Gold
    Registriert seit
    Jun 2011
    Beiträge
    219
    Dann werd ich das auch machen.
    Danke.
     

  11. #11
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Wenn du kein Index-Verlgleich haben willst, dann mach ein array_diff() anstelle des array_diff_assoc() und schon hast du was du brauchst.
     
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  12. #12
    jannicars jannicars ist offline Mitglied Gold
    Registriert seit
    Jun 2011
    Beiträge
    219
    Klappte aber komischerweise bei einem multidimensionalen Array nicht.
    Ich hab dann ein normales Array gemacht und jetzt läuft das einwandfrei!
     

Ähnliche Themen

  1. multidimensionales array durchsuchen
    Von keckskoenig im Forum PHP
    Antworten: 6
    Letzter Beitrag: 25.01.08, 13:36
  2. Antworten: 0
    Letzter Beitrag: 13.12.07, 11:58
  3. Multidimensionales Array sortieren
    Von gidde im Forum PHP
    Antworten: 12
    Letzter Beitrag: 04.11.05, 12:57
  4. Multidimensionales Array sortieren
    Von firespawn im Forum PHP
    Antworten: 1
    Letzter Beitrag: 25.05.05, 23:45
  5. Multidimensionales Array auslesen
    Von akkie im Forum PHP
    Antworten: 5
    Letzter Beitrag: 13.03.03, 22:45