如何合并两个排序的二维数组而不更改它们的顺序

时间:2016-04-05 15:10:48

标签: php arrays sorting

假设我按照他们的分数排序男性名单,并按照他们的分数排序(从最高到最低)。 现在我想要一个列表:

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]

不同的尺寸并不重要,只是混合到每个尺寸的任何长度,(简而言之,我们需要得到一个结果,这样如果我们从结果中删除"男性"数组将得到原始的"女性"阵列,反之亦然。)

1 个答案:

答案 0 :(得分:0)

输入数组已经排序

如果你知道如何遍历其中一个,你知道如何迭代 通过另一个数组也是如此。迭代两者(交替)。

伪代码:

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() );
}

(编辑)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代码正在做的是获取键和值,然后将其添加到关联数组,无论该键和值是什么。

由于数组已经排序,所需要做的就是根据问题中的规范交替将其元素添加到合并数组

  

请注意,事件[sic]如果最高分女性低于第二分数男性,则不重要