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 $arr1 = array('I' => 1, 'II' => 2, 'III' => 3 ); $arr2 = array( 'II' => 20, 'III' => 30, 'IV' => 40); var_dump($arr1 + $arr2); var_dump($arr2 + $arr1); ?>
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 $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)); ?>
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 $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)); ?>
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 $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)); ?>
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 $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)); ?>
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 $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)); ?>
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 $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)); ?>
array(1) { ["I"]=> int(1) } array(1) { ["IV"]=> int(4) }