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

时间:2017-08-07 19:26:26

标签: php arrays set set-theory

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

对于大多数人来说,这可能是一个简单的集理论问题,但这对我来说很困难。

所以我有一个键控数组:

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

1 个答案:

答案 0 :(得分:2)

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

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

)