To put it quick:
http://php.net/manual/en/function.array-intersect.php
The function takes multiple array and returns an array with ONLY elements that are in every single array.
Multidimensional
This snippet takes all the multidimensional arrays and UNIONS the array together before INTERSECTING the results:
($multi1[0] U $multi1[1] U ... U $multi1[n]) INTERSECT ($multi2[0] U $multi2[1] U ... U $multi2[m]):
$result = null;
foreach(array($multi1, $multi2, $multi3) as $multi) {
$merge = array();
foreach($multi as $array) {
$merge = array_merge($merge, $array);
}
if($result == null) {
$result = $merge;
} else {
$result = array_intersect($merge, $result);
}
}
This snippet takes all the multidimensional arrays and UNIONS the array together before INTERSECTING the results:
($multi1[0] INTERSECT $multi1[1] INTERSECT ... INTERSECT $multi1[n]) INTERSECT ($multi2[0] INTERSECT $multi2[1] INTERSECT ... INTERSECT $multi2[m]):
$result_all = null;
foreach(array($multi1, $multi2, $multi3) as $multi) {
$result = null;
foreach($multi as $array) {
if($result == null) {
$result = $array;
} else {
$result = array_intersect($array, $result);
}
}
if($result_all == null) {
$result_all = $result;
} else {
$result_all = array_intersect($result, $result_all);
}
}
EDIT - Recursion
To make it simpler to read i made it recursive for the INTERSECT all case:
function array_intersect_multi($arrays, $dim = 1) {
$result = null;
foreach($arrays as $array) {
$tmp = $dim > 1 ? array_intersect_multi($array, $dim - 1) : $array;
if($result == null) {
$result = $tmp;
} else {
$result = array_intersect($tmp, $result);
}
}
return $result;
}
used like this:
$array1 = array(array('1', '2', '3'), array('3', '5', '0'));
$array2 = array(array('5', '3', '7'), array('3', '7', '8'));
$result = array_intersect_multi(array($array1, $array2), 3);
notice the dimension 3 since the array we are passing in is:
array(
array(
array('1', '2', '3'),
array('3', '5', '0')
),
array(
array('5', '3', '7'),
array('3', '7', '8')
)
)
The result should be:
array('3')