订购多个阵列(包括彼此)
Order Multiple Arrays (Including Each Other)
假设我们有如下数组。
$arr00 = [0,1,2,...,9]; // It includes 9 arrays. So the score should be 9.
$arr01 = [0,1,...,8]; // score = 8
...
$arr09 = [0]; // score = 0
ArrScore(定义):如果一个数组包含一个包含所有元素的数组
得到一分。所以在这种情况下 $arr00 的总分是 9。因为它
包括所有其他 9 个阵列。 $arr09 的分数将为 0。
实际情况
- 我们的数组元素可以是随机数。 (不是连续的订单升序 +1)
- 可能有数千个数组。
- 我们的阵列总是扁平的。 (数组中没有重复的元素)
- 我们正在使用php(任何理论方法都可以)
- 假设您有一台标准 PC,并且您将每天订购一次这些阵列。 (不需要 "which arr eats which ones" 的结果。只需 ArrScores。)
目标 是按 ArrScore 对数组进行排序。我们需要 ArrScores。应该采取什么方法? (理论或实践)
如果我理解正确,这可能会有所帮助:
function compare($a,$b) {
if(count(array_intersect($a, $b)) == count($a)) return -1;
else return 1;
}
$arr0 = [0,2,4,7];
$arr1 = [7,0,2,9,4];
$arr2 = [4,2];
$arr = [$arr0,$arr1,$arr2];
usort($arr,"compare");
foreach($arr as $a) {
print_r($a);
}
打印:
数组([0] => 4 [1] => 2)数组([0] => 0 [1] => 2 [2] => 4 [3] => 7)数组([ 0] => 7 [1] => 0 [2] => 2 [3] => 9 [4] => 4)
编辑:
计算每个数组的 ArrayScore:
$arr0 = [0,2,4,7];
$arr1 = [7,0,2,9,4];
$arr2 = [4,2];
$arr = [$arr0,$arr1,$arr2];
$arrayScores = [];
//initialize the Scores with 0
foreach($arr as $a){
$arrayScores[] = 0;
}
//run through all arrays
for($i=0;$i<count($arr);$i++){
//with $j=$i+1, every combination is only checked once
for($j=$i+1; $j<count($arr);$j++){
if(count(array_intersect($arr[$j], $arr[$i])) == count($arr[$j])) {
$arrayScores[$i]++;
}
if(count(array_intersect($arr[$i], $arr[$j])) == count($arr[$i])){
$arrayScores[$j]++;
}
}
}
假设我们有如下数组。
$arr00 = [0,1,2,...,9]; // It includes 9 arrays. So the score should be 9.
$arr01 = [0,1,...,8]; // score = 8
...
$arr09 = [0]; // score = 0
ArrScore(定义):如果一个数组包含一个包含所有元素的数组 得到一分。所以在这种情况下 $arr00 的总分是 9。因为它 包括所有其他 9 个阵列。 $arr09 的分数将为 0。
实际情况
- 我们的数组元素可以是随机数。 (不是连续的订单升序 +1)
- 可能有数千个数组。
- 我们的阵列总是扁平的。 (数组中没有重复的元素)
- 我们正在使用php(任何理论方法都可以)
- 假设您有一台标准 PC,并且您将每天订购一次这些阵列。 (不需要 "which arr eats which ones" 的结果。只需 ArrScores。)
目标 是按 ArrScore 对数组进行排序。我们需要 ArrScores。应该采取什么方法? (理论或实践)
如果我理解正确,这可能会有所帮助:
function compare($a,$b) {
if(count(array_intersect($a, $b)) == count($a)) return -1;
else return 1;
}
$arr0 = [0,2,4,7];
$arr1 = [7,0,2,9,4];
$arr2 = [4,2];
$arr = [$arr0,$arr1,$arr2];
usort($arr,"compare");
foreach($arr as $a) {
print_r($a);
}
打印:
数组([0] => 4 [1] => 2)数组([0] => 0 [1] => 2 [2] => 4 [3] => 7)数组([ 0] => 7 [1] => 0 [2] => 2 [3] => 9 [4] => 4)
编辑: 计算每个数组的 ArrayScore:
$arr0 = [0,2,4,7];
$arr1 = [7,0,2,9,4];
$arr2 = [4,2];
$arr = [$arr0,$arr1,$arr2];
$arrayScores = [];
//initialize the Scores with 0
foreach($arr as $a){
$arrayScores[] = 0;
}
//run through all arrays
for($i=0;$i<count($arr);$i++){
//with $j=$i+1, every combination is only checked once
for($j=$i+1; $j<count($arr);$j++){
if(count(array_intersect($arr[$j], $arr[$i])) == count($arr[$j])) {
$arrayScores[$i]++;
}
if(count(array_intersect($arr[$i], $arr[$j])) == count($arr[$i])){
$arrayScores[$j]++;
}
}
}