Vereinigung, Schnittmenge und Differenz bei Arrays (Thema: PHP Beispiele)

Wie man die Vereinigungsmenge, Schnittmenge und Differenz von zwei Arrays in PHP bestimmt

URL: http://www.rither.de/a/informatik/php-beispiele/arrays/vereinigung-schnittmenge-und-differenz-bei-arrays/

1. Vereinigung

1.1. Vereinigung ohne Überschreiben von Schlüsseln

Die Vereinigung ohne Überschreiben von Schlüsseln zweier Arrays $arr1 und $arr2 erfolgt über $arr1 + $arr2 (Additionsoperator). Das sich daraus ergebende Array enthält alle Werte aus $arr1 und zusätzlich diejenigen aus $arr2, deren Schlüssel noch nicht in $arr1 vorkommt. Alle Elemente aus $arr2, deren Schlüssel bereits in $arr1 vorkommt, werden nicht in das Ergebnis übernommen. Die Schlüssel aller aus $arr1 und $arr2 übernommenen Elemente bleiben erhalten.

PHP-Code: Mit dem Additionsoperator eine Vereinigung ohne Überschreiben durchführen
<?php
	$arr1 = array('I' => 1, 'II' => 2,  'III' => 3 );
	$arr2 = array(          'II' => 20, 'III' => 30, 'IV' => 40);
	
	var_dump($arr1 + $arr2);
	var_dump($arr2 + $arr1);
?>

HTML-Code: Ausgabe
array(4) {
  ["I"]=>
  int(1)
  ["II"]=>
  int(2)
  ["III"]=>
  int(3)
  ["IV"]=>
  int(40)
}
array(4) {
  ["II"]=>
  int(20)
  ["III"]=>
  int(30)
  ["IV"]=>
  int(40)
  ["I"]=>
  int(1)
}


1.2. Vereinigung mit Überschreiben

Die Vereinigung aller Werte zweier Arrays $arr1 und $arr2 mit Überschreiben wird mit array_merge($arr1, $arr2) durchgeführt. Im Gegensatz zu $arr1 + $arr2 werden Elemente aus $arr2 auch dann übernommen, wenn ihr Schlüssel bereits in $arr1 vorkommt.

Achtung: array_merge() überschreibt nur bei String-Schlüsseln. Elemente mit Integer-Schlüsseln aus $arr2 werden einfach an $arr1 angefügt.

PHP-Code: array_merge() benutzen, um eine Array-Vereinigung mit teilweisem Überschreiben durchzuführen
<?php
	$arr1 = array('I' => 1, 'II' => 2,  'III' => 3 );
	$arr2 = array(          'II' => 20, 'III' => 30, 'IV' => 40);
	
	var_dump(array_merge($arr1, $arr2));
	var_dump(array_merge($arr2, $arr1));
?>

HTML-Code: Ausgabe
array(4) {
  ["I"]=>
  int(1)
  ["II"]=>
  int(20)
  ["III"]=>
  int(30)
  ["IV"]=>
  int(40)
}
array(4) {
  ["II"]=>
  int(2)
  ["III"]=>
  int(3)
  ["IV"]=>
  int(40)
  ["I"]=>
  int(1)
}


1.3. Vereinigung unabhängig von Schlüsseln

Sollen alle Werte aus $arr1 und $arr2 in einem neuen Array vereinigt werden — unabhängig von ihren Schlüsseln — dann kann array_merge() mit array_values($arr) kombiniert werden. array_values($arr) liest alle Werte aus $arr aus und gibt sie als neues Array mit neuen Schlüsseln zurück. Die neuen Schlüssel sind Integer, beginnend bei 0 (0, 1, 2, 3, ...). Entstehende Duplikate können bei Bedarf mit array_unique($arr) entfernt werden.

PHP-Code: Alle Werte zweier Arrays vereinigen, ohne dass einer überschrieben wird
<?php
	$arr1 = array('I' => 'I', 'II' => 'II', 'III' => 'III' );
	$arr2 = array(            'II' => 'II', 'III' => 'III', 'IV' => 'IV');
	
	$both = array_merge(array_values($arr1), array_values($arr2));
	
	var_dump($both);
	var_dump(array_unique($both));
?>

HTML-Code: Ausgabe
array(6) {
  [0]=>
  string(1) "I"
  [1]=>
  string(2) "II"
  [2]=>
  string(3) "III"
  [3]=>
  string(2) "II"
  [4]=>
  string(3) "III"
  [5]=>
  string(2) "IV"
}
array(4) {
  [0]=>
  string(1) "I"
  [1]=>
  string(2) "II"
  [2]=>
  string(3) "III"
  [5]=>
  string(2) "IV"
}


2. Schnittmenge

2.1. Schnittmenge aller Schlüssel

array_intersect_key($arr1, $arr2) dient zur Ermittlung der Schnittmenge der Schlüssel zwischen $arr1 und $arr2. Die Rückgabe umfasst alle Elemente aus $arr1 deren Schlüssel auch in $arr2 vorkommen.

PHP-Code: Die Schnittmenge von Array-Schlüsseln über array_intersect_key() bilden
<?php
	$arr1 = array('I' => 1, 'II' => 2,  'III' => 3 );
	$arr2 = array(          'II' => 20, 'III' => 30, 'IV' => 40);
	
	var_dump(array_intersect_key($arr1, $arr2));
	var_dump(array_intersect_key($arr2, $arr1));
?>

HTML-Code: Ausgabe
array(2) {
  ["II"]=>
  int(2)
  ["III"]=>
  int(3)
}
array(2) {
  ["II"]=>
  int(20)
  ["III"]=>
  int(30)
}


3. Schnittmenge aller Werte

Analog zur Schnittmenge der Schlüssel arbeitet die Schnittmenge der Werte. Diese wird man array_intersect($arr1, $arr2) erzeugt. Das Ergebnis enthält alle Werte aus $arr1, die auch in $arr2 vorkommen.

PHP-Code: Die Schnittmenge der Werte zweier Arrays über array_intersect() ermitteln
<?php
	$arr1 = array('I' => 1, 'II' => 2, 'III' => 3 );
	$arr2 = array(		    'II' => 2, 'III' => 3, 'IV' => 4);
	
	var_dump(array_intersect($arr1, $arr2));
	var_dump(array_intersect($arr2, $arr1));
?>

HTML-Code: Ausgabe
array(2) {
  ["II"]=>
  int(2)
  ["III"]=>
  int(3)
}
array(2) {
  ["II"]=>
  int(2)
  ["III"]=>
  int(3)
}


4. Differenz

4.1. Differenz aller Schlüssel

Die Differenz der Schlüssel zweier Arrays $arr1 und $arr2 wird mit array_diff_key($arr1, $arr2) bestimmt und enthält diejenigen Schlüssel aus $arr1, die nicht in $arr2 enthalten sind.

PHP-Code: Unterschiede zwischen den Schlüsseln zweier Arrays entdecken
<?php
	$arr1 = array('I' => 1, 'II' => 2,  'III' => 3 );
	$arr2 = array(          'II' => 20, 'III' => 30, 'IV' => 40);
	
	var_dump(array_diff_key($arr1, $arr2));
	var_dump(array_diff_key($arr2, $arr1));
?>

HTML-Code: Ausgabe
array(1) {
  ["I"]=>
  int(1)
}
array(1) {
  ["IV"]=>
  int(40)
}


4.2. Differenz aller Werte

Auch die Differenz der Werte zweier Arrays $arr1 und $arr2 lässt sich ermitteln. Dies erfolgt über array_diff($arr1, $arr2). Die Rückgabe umfasst alle Werte aus $arr1, die nicht in $arr2 vorkommen.

PHP-Code: Wie man die Differenz/den Unterschied von zwei Arrays über array_diff() bestimmt
<?php
	$arr1 = array('I' => 1, 'II' => 2, 'III' => 3 );
	$arr2 = array(          'II' => 2, 'III' => 3, 'IV' => 4);
	
	var_dump(array_diff($arr1, $arr2));
	var_dump(array_diff($arr2, $arr1));
?>

HTML-Code: Ausgabe
array(1) {
  ["I"]=>
  int(1)
}
array(1) {
  ["IV"]=>
  int(4)
}


Um unsere Webseite für Sie optimal zu gestalten und fortlaufend verbessern zu können, verwenden wir Cookies. Durch die weitere Nutzung der Webseite stimmen Sie der Verwendung von Cookies zu. Weitere Informationen zu Cookies erhalten Sie in unserer Datenschutzerklärung. OK