PHP Doppelte Werte in Array(s), erstes Vorkommen behalten, Rest löschen

KeinProblem

Ensign
Registriert
Okt. 2013
Beiträge
191
Hi, KeinProblem hat ein Problem g

Ich habe zwei Arrays, in einem sind von Hand angegebene IDs gespeichert, im anderen die IDs aller Einträge einer Kategorie (Wordpress).

Nun möchte ich folgendes:

Es ist möglich, dass sich in beiden Arrays gleiche IDs befinden. Nun möchte ich einen Array erstellen, in dem sich alle IDs beider Arrays befinden. Doppelte IDs sollen nur einmal vorkommen. Ich finde im Netz hauptsächlich Funktionen zum Entfernen doppelter Einträge, das ist aber nicht das, was ich finden möchte.

Einfaches Beispiel:

Array_1=(1,4,6,8,9)
Array_2=(2,4,7,9)

Gewünschtes Ergebnis:

Array=(1,2,4,6,7,8,9)

Wahrscheinlich ist das total einfach, aber ich stehe leider gerade auf dem Schlauch :)

Danke schonmal :)
 
Wenn du weisst wie du doppelte Einträge entfernst musst du ja nur wissen wie man die beiden Arrays zusammenführt (in englisch "merge"): array_merge

Dann hast du ein Array mit allen Elementen und kannst dann ua. mit array_unique die Duplikate rauswerfen.
 
  • Gefällt mir
Reaktionen: Baal Netbeck
Hi,

füge beide Arrays in ein neues Array zusammen und entfernen die doppelten Einträge

array_unique(array_merge($array1,$array2), SORT_REGULAR);


VG,
Mad
 
Nur als Nachtrag, wie man das Problem allgemein löst. Im Allgemeinen kannst du die Arrays sortieren in O(n * log(n)) Laufzeit und dann in O(n) die Arrays zusammenführen. Das Zusammenführen als Pseudocode:

Code:
idx1 = 0
idx2 = 0
idx3 = 0
while (idx1 < arr1.len && idx2 < arr2.len) {
    if (arr1[idx1] < arr2[idx2]) {
         arrRes[idx3] = arr1[idx1]
         idx1++
    }
    else if (arr1[idx1] > arr2[idx2]) {
         arrRes[idx3] = arr2[idx2]
         idx2++
    }
    else {
         arrRes[idx3] = arr1[idx1]
         idx1++
         idx2++
    }
    idx3++
}
while (idx1 < arr1.len) {
     arrRes[idx3] = arr1[idx1]
     idx1++
     idx3++
}
while (idx2 < arr2.len) {  
     arrRes[idx3] = arr1[idx2]
     idx2++
     idx3++
}

Falls du dies oft machst und mit grossen Arrays, lohnt es sich dies selbst zu schreiben. Ansonsten nach Funktionen im Framework suchen. Für PHP wurde es ja gelöst. Viele Sprachen haben "Sets", wobei diese unique constraints haben. Wie in der Mathematik, daher der Name.

Viel Spass und Gruss
 
Selbst wenn man jetzt keine nativen Arrayfunktionen kennt ist das unter PHP easy peasy weil du den Schlüssel des Arrays nutzen kannst, gerade PHP Anfänger tun sich da oft schwer weil sie von c oder c++ kommen und nix mit assoziativen Arrays anfangen können:

PHP:
$result = array();
foreach($array1 as $key => $value) {
  if(!isset($result[$value])) {
    $result[$value] = $value;
  }
}
foreach($array2 as $key => $value) {
  if(!isset($result[$value])) {
    $result[$value] = $value;
  }
}
 
  • Gefällt mir
Reaktionen: netzgestaltung und new Account()
Mal ne blöde Frage, bin selbst kein PHPler, aber gibts für sowas nicht normalerweise Sets?!
 
  • Gefällt mir
Reaktionen: mental.dIseASe
Ebrithil schrieb:
Mal ne blöde Frage, bin selbst kein PHPler, aber gibts für sowas nicht normalerweise Sets?!

Die normalen Arrays in Php sind schon hashtables, Set gibts wahrscheinlich auch aber in der Praxis muss in Php schon einiges passieren dass du mit nem normalen Array nicht klarkommst...
 
Zurück
Oben