Нахождение пересечений массива и создание нового набора массивов

Я ищу построить новый массив, найдя пересечение заданного массива массивов.

Вероятно, это простая проблема теории множеств для большинства людей, но мне сложно обернуть голову вокруг.

Итак, у меня есть массив ключей:

$myArray = [
'array1' => [A, B, C],
'array2' => [A, B, C, D],
'array3' => [A, B, C, D],
'array4' => [D],
]

И цель состоит в том, чтобы создать совершенно новый массив, в который входят сцепленные ключи предыдущего массива, если они имеют пересечение:

В основном так:

 $newArray = [
'array1,array2,array3' => [A, B, C],
'array2,array3,array4' => [D]
]

Так как array1, array2, array3 имеют ABC в команде, они будут формироваться как один массив с ключами, такой же как array2, array3, array4 и так далее.

Я попытался поэкспериментировать с array_intersect, но мне кажется, что он не тот, который я ищу, или, возможно, я решил его по-настоящему неправильно. Любые идеи очень ценятся.

$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]

0

Решение

Этот код даст желаемый массив в качестве вывода.

$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);

Выход положен

Array
(
[array1,array2,array3] => Array
(
[0] => A
[1] => B
[2] => C
)

[array2,array3,array4] => Array
(
[0] => D
)

)
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]