Im looking the build a new array by finding the intersection of a given array of arrays.
This probably a simple set theory problem for most people but its kind of hard for me to wrap my head around.
So I have a keyed array:
$myArray = [
'array1' => [A, B, C],
'array2' => [A, B, C, D],
'array3' => [A, B, C, D],
'array4' => [D],
]
And the goal is to build an entirely new array keyed in with concatenated keys of the previous array if they have an intersection:
Basically like this:
$newArray = [
'array1,array2,array3' => [A, B, C],
'array2,array3,array4' => [D]
]
Since array1, array2, array3 have ABC in command they will form as one keyed array, same as array2,array3,array4 and so on.
I have tried to experiment with array_intersect but it seems like its not the one that im looking for or perhaps I solving it in a really wrong way. Any ideas is much appreciated.
$myArray = [
'array1' => [A, B, C],
'array2' => [A, B, C, D],
'array3' => [A, B, C, D],
'array4' => [D],
];
$newArray = [];
$keys = array_keys($myArray);
for($i = 0, $size = count($myArray); $i < $size; $i++){
for($k = $i; $k < $size; $k++){
print_r(array_intersect($myArray[$keys[$i]], $myArray[$keys[$k]]));
}
}
//Foal
// 'array1,array2,array3' => [A, B, C]
// 'array2,array3,array4' => [D]
This code will give the desired array as output.
$myArray = [
'array1' => ['A', 'B', 'C'],
'array2' => ['A', 'B', 'C', 'D'],
'array3' => ['A', 'B', 'C', 'D'],
'array4' => ['D'],
];
// Define new arrays
$newArray = [];
$finalArray = [];
// loop the array and create a new array with values like (A,B,C..) as keys
foreach($myArray as $key=>$value){
foreach($value as $k=>$v){
// if already value exists append new value with comma
$newArray[$v] = isset($newArray[$v]) ? $newArray[$v].','.$key:$key;
}
}
foreach($newArray as $key=>$value){
$finalArray[$value][] = $key;
}
print_r($finalArray);
Out put is
Array
(
[array1,array2,array3] => Array
(
[0] => A
[1] => B
[2] => C
)
[array2,array3,array4] => Array
(
[0] => D
)
)