PHP从第一个数组到第二个数组按ID排序合并数组并重复

时间:2014-03-19 13:45:17

标签: php arrays sorting

我有以下两个数组:

ARRAY1

[0] => Array
    (
        [date] => 2014-02-01
        [course_id] => 1
        [id] => 24     [reg] => 1

    )

[1] => Array
    (
        [date] => 2014-02-01
        [course_id] => 2
        [id] => 25
   [reg] => 2

    )

数组2

[0] => Array
    (
        [date] => 2014-02-01
        [course_id] => 1
        [id] => 24
    )

[1] => Array
    (
        [date] => 2014-02-01
        [course_id] => 1
        [id] => 24

    )

[2] => Array
    (
        [date] => 2014-02-01
        [course_id] => 2
        [id] => 25

    )

[3] => Array
    (
        [date] => 2014-02-01
        [course_id] => 2
        [id] => 25
    )

我使用array_merge合并了这两个数组,新数组是array3

我使用以下函数对array3进行了排序:

function cmp($a, $b) {
    return strnatcasecmp( $a[course_id], $b[course_id] );
}
usort($array3, "cmp");

然而,我希望获得的结果不会显示在我想要的下面,其中来自数组1的course_id = 1始终位于顶部,接着是来自数组2的匹配Course_ids的列表,然后是来自数组的course_id = 2 1,后面是数组2中匹配的Course_ids列表:

[0] => Array
    (
        [date] => 2014-02-01
        [course_id] => 1
        [id] => 24
   [reg] => 1
    )

[1] => Array
    (
        [date] => 2014-02-01
        [course_id] => 1
        [id] => 24

    )

[2] => Array
    (
        [date] => 2014-02-01
        [course_id] => 1
        [id] => 24

    )

[3] => Array
    (
        [date] => 2014-02-01
        [course_id] => 2
        [id] => 25
   [reg] => 2
    )
[4] => Array
    (
        [date] => 2014-02-01
        [course_id] => 2
        [id] => 25

    )

[5] => Array
    (
        [date] => 2014-02-01
        [course_id] => 2
        [id] => 25

    )

我用来排序数组3的函数并不总能提供所需的结果。请帮您解决这个问题。

2 个答案:

答案 0 :(得分:0)

a中的id附加到第一个数组中,将b中的id放在第二个数组中,并在找到相同的id时对合并后的数组进行排序,最后使用区分字符来确定原始数组。 在对合并的数组进行排序时,请在intval(id)上对其进行排序。

PS:这只是区分两个阵列的一种方法。您还可以在数组中添加另一个元素来标识原始数组。

另一种可能的方法是首先单独对数组进行排序然后合并它们。这将更快,但需要比第一种方法更多的编码。

答案 1 :(得分:0)

我设法通过以下链接提供了非常有用的指南来找到答案:

http://agichevski.com/2013/06/02/sorting-a-php-multidimensional-array-by-value/

foreach ($data as $val)
 $tmp_age[] = $val['age'];

foreach ($data as $val)
 $tmp_name[] = $val['name'];

array_multisort($tmp_age, SORT_DESC, $tmp_name, $data);

我根据自己的数据调整了它,它产生了我想要的结果。

希望这可以帮助其他类似场景。