查找数组的交集并创建一组新数组

Finding the intersections of array and create a new set of arrays

我正在寻找通过查找给定数组的交集来构建新数组。

对于大多数人来说,这可能是一个简单的集合论问题,但对我来说却有点难以理解。

所以我有一个键控数组:

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

此代码将给出所需的数组作为输出。

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

)