【问题标题】:Finding the intersections of array and create a new set of arrays查找数组的交集并创建一组新数组
【发布时间】:2017-08-07 19:26:25
【问题描述】:

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

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

所以我有一个键控数组:

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

【问题讨论】:

  • 问题没有完全定义。 $newArray 不应该还包含值为[] 的键'array1,array4' 和值为[A, B, C, D] 等的键'array2,array3' 吗?
  • array2,array3 不包括在内,因为它的所有元素都已存在于 array1, array2, array3array2,array3,array4 中,尽管在集合论中空集也被视为新条目

标签: php arrays set set-theory


【解决方案1】:

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

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

)

【讨论】:

  • 这令人印象深刻,!谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-07
  • 2013-09-10
  • 2021-12-13
  • 1970-01-01
相关资源
最近更新 更多