查找数组的交集并创建一组新数组
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
)
)
我正在寻找通过查找给定数组的交集来构建新数组。
对于大多数人来说,这可能是一个简单的集合论问题,但对我来说却有点难以理解。
所以我有一个键控数组:
$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
)
)