【发布时间】: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, array3和array2,array3,array4中,尽管在集合论中空集也被视为新条目
标签: php arrays set set-theory