2014-03-19 113 views
0

我有以下兩個數組:PHP排序合併陣列由編號從1個數組,然後第2個數組,然後重複

陣列1

[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總是在頂部,隨後從陣列中兩個匹配Course_ids列表的結果,然後從陣列1,隨後通過匹配Course_ids的列表從陣列2 COURSE_ID = 2:

[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犯規所有的時間提供所需的結果的功能。請幫助你解決這個問題。

+0

引自手冊(http://www.php.net/manual/en/function.usort.php):'如果第一個參數比較函數必須返回小於,等於或大於零的整數被認爲分別小於,等於或大於第二個。' – hindmost

回答

0

將第一個數組中的ID追加a和第二個數組中的那些b,並在找到相同ID時對合並數組進行排序時,在末尾使用區分字符來確定原始數組。 排序合併數組時,按intval(id)對其進行排序。

PS:這只是區分兩個陣列的一種方法。您也可以在數組中添加另一個元素來標識原始數組。

另一種可能的方法是首先單獨排序數組,然後合併它們。這將會更快,但比第一種方法需要更多的編碼。

+0

嗨,感謝您的建議,但我仍然無能爲力,因爲我無法獲得所需的輸出。我已經將strnatcasecmp更改爲intval,並且這沒有什麼不同,我不確定如何執行你建議的這個部分,「當你找到相同的id時,最後使用區分字符來確定原始數組。」你能提供一個例子嗎?我一直在研究所有不同的可能性,但有些東西超出了我的理解範圍。 – user3437807

+0

@ user3437807所以,當你得到兩個具有相同intval(id)的元素時,然後獲取id的最後一個字符並將其與該位置進行比較,並根據該位置合併數組中的元素。如果您需要代碼幫助,請回複評論。 –

相關問題