Php 查找数组的交点并创建一组新数组

Php 查找数组的交点并创建一组新数组,php,arrays,set,set-theory,Php,Arrays,Set,Set Theory,我正在寻找通过查找给定数组的交集来构建新数组的方法 对大多数人来说,这可能是一个简单的集合论问题,但对我来说,这有点难以理解 所以我有一个键控数组: $myArray = [ 'array1' => [A, B, C], 'array2' => [A, B, C, D], 'array3' => [A, B, C, D], 'array4' => [D], ] 我们的目标是构建一个全新的数组,如果它们具有交集,则使用前一个数组的串联键键入: 基本上是这样的:

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

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

所以我有一个键控数组:

$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],
'阵列4'=>D],
];
$newArray=[];
$keys=array\U keys($myArray);
对于($i=0,$size=count($myArray);$i<$size;$i++){
对于($k=$i;$k<$size;$k++){
打印(数组相交($myArray[$keys[$i]],$myArray[$keys[$k]]);
}
}
//小马驹
//'阵列1,阵列2,阵列3'=>[A,B,C]
//'阵列2,阵列3,阵列4'=>[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
        )

)

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

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

)

这个问题还没有完全确定。
$newArray
不应该也包含带有值的键
'array1,array4'
'array2,array3'
和带有值的键
[A,B,C,D]
等吗?
array2,array3
不包括在内,因为它的所有元素都已经存在于
array1,array2,array3
array2,array3,array4
,尽管在集合论中,空集也被认为是一个新的入口,但这个问题并没有完全定义。
$newArray
不应该也包含带有值的键
'array1,array4'
'array2,array3'
和带有值的键
[A,B,C,D]
等吗?
array2,array3
不包括在内,因为它的所有元素都已经存在于
array1,array2,array3
array2,array3,array4
,尽管在集合论中空集也被认为是一个令人印象深刻的新入口,!谢谢你,真是令人印象深刻,!非常感谢。