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)
}