如何在不改变顺序的情况下合并两个排序的二维数组


How to merge two sorted two dimensional arrays without changing their order

假设我有按分数排序的男性列表和按分数排序(从最高到最低)的女性列表。现在我想有一个列表:

Highest score male, Highest score female, 2nd score male, 2nd score female, 3rd score male, 3rd score female, etc...

(注意,如果得分最高的女性低于得分第二的男性,这并不重要。)

我怎么能用php做到这一点?

按要求更新:

调用的数组:$arr_sort[$score][$gender]

输入阵列1:

$arr_sort[20][male],$arr_sort[18][male],$arr_sort[17][male],$arr_sort[10][male],$arr_sort[9][male],$arr_sort[5][male],$arr_sort[1][male]

输入阵列2:

$arr_sort[15][female],$arr_sort[14][female],$arr_sort[13][female]

预期结果:

$arr_sort[20][male],$arr_sort[15][female],$arr_sort[18][male],$arr_sort[14][female],$arr_sort[17][male],$arr_sort[13][female],$arr_sort[10][male],$arr_sort[9][male],$arr_sort[5][male],$arr_sort[1][male]

不同的大小并不重要,只要混合到每个数组的任何长度即可。(简而言之,我们需要得到一个结果,这样如果我们从结果中删除"阳性"数组,我们就会得到原始的"阴性"数组,反之亦然。)

输入数组已被排序

如果你知道如何迭代其中一个,你就知道如何迭代也通过另一个阵列。在两者上迭代(交替)。

伪代码:

Iterator m = new Iterator(array1);
Iterator f = new Iterator(array2);
List array3 = [];
while (m.hasNext() || f.hasNext() ) {
    if (male.hasNext())
        array3.add( m.next() );
    if (f.hasNext())
        array3.add( f.next() );
}

(EDIT)php示例:

$array3 = [];
$mkeys = array_keys($array1);
$fkeys = array_keys($array2);
$nm = count($mkeys);
$nf = count($fkeys);
for ($i=0; ($i<$nm)||($i<$nf); ++$i) {
    if ($i<$nm) {
        //$array3[] = array($mkeys[$i], $array1[$mkeys[$i]]);
        $array3[$mkeys[$i]] = $array1[$mkeys[$i]];
    }
    if ($i<$nf) {
        //$array3[] = array($fkeys[$i], $array2[$fkeys[$i]]);
        $array3[$fkeys[$i]] = $array2[$fkeys[$i]];
    }
}

php代码所做的是获取键和值,然后将其添加到关联数组中,而不管该键和值是什么。

由于数组已经排序,所需要做的就是按照问题中的规范交替地将它们的元素添加到合并数组中

注意,如果女性得分最高低于男性得分第二,则并不重要