2010-09-28 43 views
0

我想弄清楚如何在PHP中將二維數組排序成一個3d數組。該數組包含來自用戶的任務管理樹,目前正在安排像這樣:排序爲3D數組的二維數組PHP

Array ([0] => Array ([Title] => Test Task [Author] => 5 [DateIn] => 2010-09-15 [Deadline] => 2010-09-30 [Position] => 1 [Description] => This is a test task [Assignee] => 3) [1] => Array ([Title] => Test Task [Author] => 5 [DateIn] => 2010-09-15 [Deadline] => 2010-09-29 [Position] => 1 [Description] => Blah blah [Assignee] => 3)) 

我希望如此,它的每個二級數組包含了所有分配給一個用戶的任務三維數組排序。是否有捷徑可尋?我發現最接近的是array_multsort,但這並不完全符合我的要求。

*編輯 這基本上是我目前工作的公司的任務管理器應用程序。經理需要能夠看到已分配給其員工的任務。我目前將員工和主管人員組織在一棵樹中,因此他們需要查看其分支中的所有內容。

現在,我寫的函數返回每個「經理」的員工的任務排序沒有特定的順序。爲了減少混亂,我需要一次只能顯示一個「員工」的任務。目前這是不可能的,因爲數組的結構是這樣的,它僅包含作者被標記爲當前用戶的所有任務的列表。

簡而言之,我想將這些任務排序爲一個3維數組,其中每個第2級數組包含屬於當前用戶的一個「員工」的任務。

+0

我們肯定需要更多信息來幫助您 – Galen 2010-09-28 22:23:46

回答

1

我不太明白你在做什麼,但是如果你想產生一個新的數組來列出受讓人的任務,那麼你可以使用以下內容。

foreach ($old as $task) 
    $new[$task['Assignee']][] = $task; 

這會給你一個數組,其中的鍵是受讓人ID,子數組是分配給他們的任務。

1

所以,如果我明白了,你的陣列將具有以下安排:

manager1 
    employee1 
     task1 
    employee2 
     task2 
     task3 
manager2 
    employee3 
. 
. 
. 

這是正確的嗎?如果是這樣,那麼假設「作者」是經理,「受讓人」是員工,請嘗試以下操作:

$new_array = array(); 
foreach($old_array as $task){ 
    if(array_key_exists($task["author"], $new_array)){ // the manager already has an array slot 
     if(array_key_exists($task["assignee"], $new_array[$task["author"]])){ // the employee already has an array slot under this manager 
      array_push($new_array[$task["author"]][$task["assignee"]], $task); 
     } else { // manager exists, employee doesn't 
      $new_array[$task["author"]][$task["assignee"]][0] = $task; 
     } 
    } else { // manager doesn't exist 
     $new_array[$task["author"]] = array($task["assignee"] => array($task)); 
    } 
}